xref: /llvm-project/llvm/test/Transforms/InstSimplify/ConstProp/insertvalue.ll (revision b280ee1dd7e9b36ae7aaa3953556e4b7a7f31a29)
1*b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
2486ed885SArthur Eubanks
3486ed885SArthur Eubanks%struct = type { i32, [4 x i8] }
4486ed885SArthur Eubanks
5486ed885SArthur Eubanksdefine %struct @test1() {
6486ed885SArthur Eubanks  %A = insertvalue %struct { i32 2, [4 x i8] c"foo\00" }, i32 1, 0
7486ed885SArthur Eubanks  ret %struct %A
8486ed885SArthur Eubanks; CHECK-LABEL: @test1(
9486ed885SArthur Eubanks; CHECK: ret %struct { i32 1, [4 x i8] c"foo\00" }
10486ed885SArthur Eubanks}
11486ed885SArthur Eubanks
12486ed885SArthur Eubanksdefine %struct @test2() {
13486ed885SArthur Eubanks  %A = insertvalue %struct { i32 2, [4 x i8] c"foo\00" }, i8 1, 1, 2
14486ed885SArthur Eubanks  ret %struct %A
15486ed885SArthur Eubanks; CHECK-LABEL: @test2(
16486ed885SArthur Eubanks; CHECK: ret %struct { i32 2, [4 x i8] c"fo\01\00" }
17486ed885SArthur Eubanks}
18486ed885SArthur Eubanks
19486ed885SArthur Eubanksdefine [3 x %struct] @test3() {
20486ed885SArthur Eubanks  %A = insertvalue [3 x %struct] [ %struct { i32 0, [4 x i8] c"aaaa" }, %struct { i32 1, [4 x i8] c"bbbb" }, %struct { i32 2, [4 x i8] c"cccc" } ], i32 -1, 1, 0
21486ed885SArthur Eubanks  ret [3 x %struct] %A
22486ed885SArthur Eubanks; CHECK-LABEL: @test3(
23486ed885SArthur Eubanks; CHECK:ret [3 x %struct] [%struct { i32 0, [4 x i8] c"aaaa" }, %struct { i32 -1, [4 x i8] c"bbbb" }, %struct { i32 2, [4 x i8] c"cccc" }]
24486ed885SArthur Eubanks}
25486ed885SArthur Eubanks
26486ed885SArthur Eubanksdefine %struct @zeroinitializer-test1() {
27486ed885SArthur Eubanks  %A = insertvalue %struct zeroinitializer, i32 1, 0
28486ed885SArthur Eubanks  ret %struct %A
29486ed885SArthur Eubanks; CHECK: @zeroinitializer-test1
30486ed885SArthur Eubanks; CHECK: ret %struct { i32 1, [4 x i8] zeroinitializer }
31486ed885SArthur Eubanks}
32486ed885SArthur Eubanks
33486ed885SArthur Eubanksdefine %struct @zeroinitializer-test2() {
34486ed885SArthur Eubanks  %A = insertvalue %struct zeroinitializer, i8 1, 1, 2
35486ed885SArthur Eubanks  ret %struct %A
36486ed885SArthur Eubanks; CHECK: @zeroinitializer-test2
37486ed885SArthur Eubanks; CHECK: ret %struct { i32 0, [4 x i8] c"\00\00\01\00" }
38486ed885SArthur Eubanks}
39486ed885SArthur Eubanks
40486ed885SArthur Eubanksdefine [3 x %struct] @zeroinitializer-test3() {
41486ed885SArthur Eubanks  %A = insertvalue [3 x %struct] zeroinitializer, i32 1, 1, 0
42486ed885SArthur Eubanks  ret [3 x %struct] %A
43486ed885SArthur Eubanks; CHECK: @zeroinitializer-test3
44486ed885SArthur Eubanks; CHECK: ret [3 x %struct] [%struct zeroinitializer, %struct { i32 1, [4 x i8] zeroinitializer }, %struct zeroinitializer]
45486ed885SArthur Eubanks}
46486ed885SArthur Eubanks
47486ed885SArthur Eubanksdefine %struct @undef-test1() {
48486ed885SArthur Eubanks  %A = insertvalue %struct undef, i32 1, 0
49486ed885SArthur Eubanks  ret %struct %A
50486ed885SArthur Eubanks; CHECK: @undef-test1
51486ed885SArthur Eubanks; CHECK: ret %struct { i32 1, [4 x i8] undef }
52486ed885SArthur Eubanks}
53486ed885SArthur Eubanks
54486ed885SArthur Eubanksdefine %struct @undef-test2() {
55486ed885SArthur Eubanks  %A = insertvalue %struct undef, i8 0, 1, 2
56486ed885SArthur Eubanks  ret %struct %A
57486ed885SArthur Eubanks; CHECK: @undef-test2
58486ed885SArthur Eubanks; CHECK: ret %struct { i32 undef, [4 x i8] [i8 undef, i8 undef, i8 0, i8 undef] }
59486ed885SArthur Eubanks}
60486ed885SArthur Eubanks
61486ed885SArthur Eubanksdefine [3 x %struct] @undef-test3() {
62486ed885SArthur Eubanks  %A = insertvalue [3 x %struct] undef, i32 0, 1, 0
63486ed885SArthur Eubanks  ret [3 x %struct] %A
64486ed885SArthur Eubanks; CHECK: @undef-test3
65486ed885SArthur Eubanks; CHECK: ret [3 x %struct] [%struct undef, %struct { i32 0, [4 x i8] undef }, %struct undef]
66486ed885SArthur Eubanks}
67486ed885SArthur Eubanks
68486ed885SArthur Eubanksdefine i32 @test-float-Nan() {
69486ed885SArthur Eubanks  %A = bitcast i32 2139171423 to float
70486ed885SArthur Eubanks  %B = insertvalue [1 x float] undef, float %A, 0
71486ed885SArthur Eubanks  %C = extractvalue [1 x float] %B, 0
72486ed885SArthur Eubanks  %D = bitcast float %C to i32
73486ed885SArthur Eubanks  ret i32 %D
74486ed885SArthur Eubanks; CHECK: @test-float-Nan
75486ed885SArthur Eubanks; CHECK: ret i32 2139171423
76486ed885SArthur Eubanks}
77486ed885SArthur Eubanks
78486ed885SArthur Eubanksdefine i16 @test-half-Nan() {
79486ed885SArthur Eubanks  %A = bitcast i16 32256 to half
80486ed885SArthur Eubanks  %B = insertvalue [1 x half] undef, half %A, 0
81486ed885SArthur Eubanks  %C = extractvalue [1 x half] %B, 0
82486ed885SArthur Eubanks  %D = bitcast half %C to i16
83486ed885SArthur Eubanks  ret i16 %D
84486ed885SArthur Eubanks; CHECK: @test-half-Nan
85486ed885SArthur Eubanks; CHECK: ret i16 32256
86486ed885SArthur Eubanks}
87