xref: /aosp_15_r20/external/llvm/test/Transforms/SCCP/constant-struct.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test that constant structs are folded.
2*9880d681SAndroid Build Coastguard Worker; RUN: opt %s -sccp -S | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine internal {i64} @struct1() {
5*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i64} undef, i64 24, 0
6*9880d681SAndroid Build Coastguard Worker  ret {i64} %a
7*9880d681SAndroid Build Coastguard Worker}
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i64 } @struct1() {
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   ret { i64 } { i64 24 }
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine internal {i64, i64} @struct2() {
14*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i64, i64} undef, i64 24, 0
15*9880d681SAndroid Build Coastguard Worker  ret {i64, i64} %a
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i64, i64 } @struct2() {
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret { i64, i64 } { i64 24, i64 undef }
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine internal {i64, i64, i64} @struct3(i64 %x) {
23*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i64, i64, i64} undef, i64 24, 0
24*9880d681SAndroid Build Coastguard Worker  %b = insertvalue {i64, i64, i64} %a, i64 36, 1
25*9880d681SAndroid Build Coastguard Worker  %c = insertvalue {i64, i64, i64} %b, i64 %x, 2
26*9880d681SAndroid Build Coastguard Worker  ret {i64, i64, i64} %c
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i64, i64, i64 } @struct3(i64 %x) {
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  %c = insertvalue { i64, i64, i64 } { i64 24, i64 36, i64 undef }, i64 %x, 2
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret { i64, i64, i64 } %c
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; Test(s) for overdefined values.
35*9880d681SAndroid Build Coastguard Workerdefine internal {i64, i32} @struct4(i32 %x) {
36*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i64, i32} {i64 12, i32 24}, i32 %x, 1
37*9880d681SAndroid Build Coastguard Worker  ret {i64, i32} %a
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i64, i32 } @struct4(i32 %x) {
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  %a = insertvalue { i64, i32 } { i64 12, i32 24 }, i32 %x, 1
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret { i64, i32 } %a
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine internal {i32} @struct5(i32 %x) {
46*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i32} undef, i32 %x, 0
47*9880d681SAndroid Build Coastguard Worker  ret {i32} %a
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i32 } @struct5(i32 %x) {
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  %a = insertvalue { i32 } undef, i32 %x, 0
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret { i32 } %a
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerdefine internal {i32} @struct6({i32} %x) {
57*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i32} %x, i32 12, 0
58*9880d681SAndroid Build Coastguard Worker  ret {i32} %a
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i32 } @struct6({ i32 } %x) {
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret { i32 } { i32 12 }
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerdefine internal {i16} @struct7() {
66*9880d681SAndroid Build Coastguard Worker  %a = insertvalue {i16} {i16 4}, i16 7, 0
67*9880d681SAndroid Build Coastguard Worker  ret {i16} %a
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; CHECK: define internal { i16 } @struct7() {
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret { i16 } { i16 7 }
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: }
73