xref: /aosp_15_r20/external/llvm/test/Transforms/SCCP/apint-load.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; This test makes sure that these instructions are properly constant propagated.
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -ipsccp -S | not grep load
4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -ipsccp -S | not grep fdiv
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@X = constant i212 42
7*9880d681SAndroid Build Coastguard Worker@Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 },
8*9880d681SAndroid Build Coastguard Worker                                     { i212, float } { i212 37, float 0x3FF3B2FEC0000000 } ]
9*9880d681SAndroid Build Coastguard Workerdefine i212 @test1() {
10*9880d681SAndroid Build Coastguard Worker	%B = load i212, i212* @X
11*9880d681SAndroid Build Coastguard Worker	ret i212 %B
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine internal float @test2() {
15*9880d681SAndroid Build Coastguard Worker	%A = getelementptr [2 x { i212, float}], [2 x { i212, float}]* @Y, i32 0, i32 1, i32 1
16*9880d681SAndroid Build Coastguard Worker	%B = load float, float* %A
17*9880d681SAndroid Build Coastguard Worker	ret float %B
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine internal i212 @test3() {
21*9880d681SAndroid Build Coastguard Worker	%A = getelementptr [2 x { i212, float}], [2 x { i212, float}]* @Y, i32 0, i32 0, i32 0
22*9880d681SAndroid Build Coastguard Worker	%B = load i212, i212* %A
23*9880d681SAndroid Build Coastguard Worker	ret i212 %B
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine float @All()
27*9880d681SAndroid Build Coastguard Worker{
28*9880d681SAndroid Build Coastguard Worker   %A = call float @test2()
29*9880d681SAndroid Build Coastguard Worker   %B = call i212 @test3()
30*9880d681SAndroid Build Coastguard Worker   %C = mul i212 %B, -1234567
31*9880d681SAndroid Build Coastguard Worker   %D = sitofp i212 %C to float
32*9880d681SAndroid Build Coastguard Worker   %E = fdiv float %A, %D
33*9880d681SAndroid Build Coastguard Worker   ret float %E
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker
37