|  | ; | 
|  | ; 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, i32* %a.0         ; <i32> [#uses=1] | 
|  | %tmp.1 = load i32, 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, i32* %result              ; <i32> [#uses=1] | 
|  | ret i32 %tmp.3 | 
|  | } | 
|  |  |