|  | ; This test makes sure that these instructions are properly constant propagated. | 
|  |  | 
|  | ; RUN: opt < %s -ipsccp -S | not grep load | 
|  | ; RUN: opt < %s -ipsccp -S | not grep add | 
|  | ; RUN: opt < %s -ipsccp -S | not grep phi | 
|  |  | 
|  |  | 
|  | @Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 }, | 
|  | { i212, float } { i212 37, float 2.0 } ] | 
|  |  | 
|  | define internal float @test2() { | 
|  | %A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 1, i32 1 | 
|  | %B = load float* %A | 
|  | ret float %B | 
|  | } | 
|  |  | 
|  | define internal float  @test3() { | 
|  | %A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 0, i32 1 | 
|  | %B = load float* %A | 
|  | ret float %B | 
|  | } | 
|  |  | 
|  | define internal float @test() | 
|  | { | 
|  | %A = call float @test2() | 
|  | %B = call float @test3() | 
|  |  | 
|  | %E = fdiv float %B, %A | 
|  | ret float %E | 
|  | } | 
|  |  | 
|  | define float @All() | 
|  | { | 
|  | %A = call float @test() | 
|  | %B = fcmp oge float %A, 1.0 | 
|  | br i1 %B, label %T, label %F | 
|  | T: | 
|  | %C = fadd float %A, 1.0 | 
|  | br label %exit | 
|  | F: | 
|  | %D = fadd float %A, 2.0 | 
|  | br label %exit | 
|  | exit: | 
|  | %E = phi float [%C, %T], [%D, %F] | 
|  | ret float %E | 
|  | } | 
|  |  | 
|  |  | 
|  |  |