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