| ; | |
| ; Test: ExternalConstant | |
| ; | |
| ; Description: | |
| ; This regression test helps check whether the instruction combining | |
| ; optimization pass correctly handles global variables which are marked | |
| ; as external and constant. | |
| ; | |
| ; If a problem occurs, we should die on an assert(). Otherwise, we | |
| ; should pass through the optimizer without failure. | |
| ; | |
| ; Extra code: | |
| ; RUN: opt < %s -instcombine | |
| ; END. | |
| target datalayout = "e-p:32:32" | |
| @silly = external constant i32 ; <i32*> [#uses=1] | |
| declare void @bzero(i8*, i32) | |
| declare void @bcopy(i8*, i8*, i32) | |
| declare i32 @bcmp(i8*, i8*, i32) | |
| declare i32 @fputs(i8*, i8*) | |
| declare i32 @fputs_unlocked(i8*, i8*) | |
| define i32 @function(i32 %a.1) { | |
| entry: | |
| %a.0 = alloca i32 ; <i32*> [#uses=2] | |
| %result = alloca i32 ; <i32*> [#uses=2] | |
| store i32 %a.1, i32* %a.0 | |
| %tmp.0 = load i32* %a.0 ; <i32> [#uses=1] | |
| %tmp.1 = load i32* @silly ; <i32> [#uses=1] | |
| %tmp.2 = add i32 %tmp.0, %tmp.1 ; <i32> [#uses=1] | |
| store i32 %tmp.2, i32* %result | |
| br label %return | |
| return: ; preds = %entry | |
| %tmp.3 = load i32* %result ; <i32> [#uses=1] | |
| ret i32 %tmp.3 | |
| } | |