annotate test/Transforms/InstCombine/sub.ll @ 121:803732b1fca8

LLVM 5.0
author kono
date Fri, 27 Oct 2017 17:07:41 +0900
parents 1172e4bd9c6f
children 3a76565eade5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 target datalayout = "e-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 ; Optimize subtracts.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 ;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 ; RUN: opt < %s -instcombine -S | FileCheck %s
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 define i32 @test1(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 ; CHECK-LABEL: @test1(
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
10 ; CHECK-NEXT: ret i32 0
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
11 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
12 %B = sub i32 %A, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
13 ret i32 %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 define i32 @test2(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 ; CHECK-LABEL: @test2(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
18 ; CHECK-NEXT: ret i32 [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
19 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
20 %B = sub i32 %A, 0
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
21 ret i32 %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 define i32 @test3(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 ; CHECK-LABEL: @test3(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
26 ; CHECK-NEXT: ret i32 [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
27 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
28 %B = sub i32 0, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
29 %C = sub i32 0, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
30 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 define i32 @test4(i32 %A, i32 %x) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 ; CHECK-LABEL: @test4(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
35 ; CHECK-NEXT: [[C:%.*]] = add i32 [[X:%.*]], [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
36 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
37 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
38 %B = sub i32 0, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
39 %C = sub i32 %x, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
40 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 define i32 @test5(i32 %A, i32 %B, i32 %C) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 ; CHECK-LABEL: @test5(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
45 ; CHECK-NEXT: [[D1:%.*]] = sub i32 [[C:%.*]], [[B:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
46 ; CHECK-NEXT: [[E:%.*]] = add i32 [[D1]], [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
47 ; CHECK-NEXT: ret i32 [[E]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
48 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
49 %D = sub i32 %B, %C
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
50 %E = sub i32 %A, %D
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
51 ret i32 %E
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 define i32 @test6(i32 %A, i32 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 ; CHECK-LABEL: @test6(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
56 ; CHECK-NEXT: [[B_NOT:%.*]] = xor i32 [[B:%.*]], -1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
57 ; CHECK-NEXT: [[D:%.*]] = and i32 [[B_NOT]], [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
58 ; CHECK-NEXT: ret i32 [[D]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
59 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
60 %C = and i32 %A, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
61 %D = sub i32 %A, %C
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
62 ret i32 %D
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
65 define i32 @test6commuted(i32 %A, i32 %B) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
66 ; CHECK-LABEL: @test6commuted(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
67 ; CHECK-NEXT: [[B_NOT:%.*]] = xor i32 [[B:%.*]], -1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
68 ; CHECK-NEXT: [[D:%.*]] = and i32 [[B_NOT]], [[A:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
69 ; CHECK-NEXT: ret i32 [[D]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
70 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
71 %C = and i32 %B, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
72 %D = sub i32 %A, %C
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
73 ret i32 %D
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
74 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
75
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 define i32 @test7(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 ; CHECK-LABEL: @test7(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
78 ; CHECK-NEXT: [[B:%.*]] = xor i32 [[A:%.*]], -1
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
79 ; CHECK-NEXT: ret i32 [[B]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
80 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
81 %B = sub i32 -1, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
82 ret i32 %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 define i32 @test8(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 ; CHECK-LABEL: @test8(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
87 ; CHECK-NEXT: [[C:%.*]] = shl i32 [[A:%.*]], 3
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
88 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
89 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
90 %B = mul i32 9, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
91 %C = sub i32 %B, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
92 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 define i32 @test9(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 ; CHECK-LABEL: @test9(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
97 ; CHECK-NEXT: [[C:%.*]] = mul i32 [[A:%.*]], -2
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
98 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
99 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
100 %B = mul i32 3, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
101 %C = sub i32 %A, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
102 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 define i32 @test10(i32 %A, i32 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 ; CHECK-LABEL: @test10(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
107 ; CHECK-NEXT: [[E:%.*]] = mul i32 [[A:%.*]], [[B:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
108 ; CHECK-NEXT: ret i32 [[E]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
109 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
110 %C = sub i32 0, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
111 %D = sub i32 0, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
112 %E = mul i32 %C, %D
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
113 ret i32 %E
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 define i32 @test10a(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 ; CHECK-LABEL: @test10a(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
118 ; CHECK-NEXT: [[E:%.*]] = mul i32 [[A:%.*]], -7
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
119 ; CHECK-NEXT: ret i32 [[E]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
120 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
121 %C = sub i32 0, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
122 %E = mul i32 %C, 7
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
123 ret i32 %E
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 define i1 @test11(i8 %A, i8 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 ; CHECK-LABEL: @test11(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
128 ; CHECK-NEXT: [[D:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
129 ; CHECK-NEXT: ret i1 [[D]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
130 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
131 %C = sub i8 %A, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
132 %D = icmp ne i8 %C, 0
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
133 ret i1 %D
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
134 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
135
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
136 define <2 x i1> @test11vec(<2 x i8> %A, <2 x i8> %B) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
137 ; CHECK-LABEL: @test11vec(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
138 ; CHECK-NEXT: [[D:%.*]] = icmp ne <2 x i8> [[A:%.*]], [[B:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
139 ; CHECK-NEXT: ret <2 x i1> [[D]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
140 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
141 %C = sub <2 x i8> %A, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
142 %D = icmp ne <2 x i8> %C, zeroinitializer
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
143 ret <2 x i1> %D
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 define i32 @test12(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 ; CHECK-LABEL: @test12(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
148 ; CHECK-NEXT: [[C:%.*]] = lshr i32 [[A:%.*]], 31
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
149 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
150 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
151 %B = ashr i32 %A, 31
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
152 %C = sub i32 0, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
153 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 define i32 @test13(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 ; CHECK-LABEL: @test13(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
158 ; CHECK-NEXT: [[C:%.*]] = ashr i32 [[A:%.*]], 31
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
159 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
160 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
161 %B = lshr i32 %A, 31
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
162 %C = sub i32 0, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
163 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
166 define <2 x i32> @test12vec(<2 x i32> %A) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
167 ; CHECK-LABEL: @test12vec(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
168 ; CHECK-NEXT: [[C:%.*]] = lshr <2 x i32> [[A:%.*]], <i32 31, i32 31>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
169 ; CHECK-NEXT: ret <2 x i32> [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
170 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
171 %B = ashr <2 x i32> %A, <i32 31, i32 31>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
172 %C = sub <2 x i32> zeroinitializer, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
173 ret <2 x i32> %C
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
174 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
175
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
176 define <2 x i32> @test13vec(<2 x i32> %A) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
177 ; CHECK-LABEL: @test13vec(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
178 ; CHECK-NEXT: [[C:%.*]] = ashr <2 x i32> [[A:%.*]], <i32 31, i32 31>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
179 ; CHECK-NEXT: ret <2 x i32> [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
180 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
181 %B = lshr <2 x i32> %A, <i32 31, i32 31>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
182 %C = sub <2 x i32> zeroinitializer, %B
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
183 ret <2 x i32> %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 define i32 @test15(i32 %A, i32 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 ; CHECK-LABEL: @test15(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
188 ; CHECK-NEXT: [[C:%.*]] = sub i32 0, [[A:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
189 ; CHECK-NEXT: [[D:%.*]] = srem i32 [[B:%.*]], [[C]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
190 ; CHECK-NEXT: ret i32 [[D]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
191 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
192 %C = sub i32 0, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
193 %D = srem i32 %B, %C
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
194 ret i32 %D
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 define i32 @test16(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 ; CHECK-LABEL: @test16(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
199 ; CHECK-NEXT: [[Y:%.*]] = sdiv i32 [[A:%.*]], -1123
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
200 ; CHECK-NEXT: ret i32 [[Y]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
201 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
202 %X = sdiv i32 %A, 1123
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
203 %Y = sub i32 0, %X
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
204 ret i32 %Y
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 ; Can't fold subtract here because negation it might oveflow.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 ; PR3142
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 define i32 @test17(i32 %A) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 ; CHECK-LABEL: @test17(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
211 ; CHECK-NEXT: [[B:%.*]] = sub i32 0, [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
212 ; CHECK-NEXT: [[C:%.*]] = sdiv i32 [[B]], 1234
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
213 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
214 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
215 %B = sub i32 0, %A
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
216 %C = sdiv i32 %B, 1234
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
217 ret i32 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 define i64 @test18(i64 %Y) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 ; CHECK-LABEL: @test18(
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
222 ; CHECK-NEXT: ret i64 0
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
223 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
224 %tmp.4 = shl i64 %Y, 2
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
225 %tmp.12 = shl i64 %Y, 2
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
226 %tmp.8 = sub i64 %tmp.4, %tmp.12
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
227 ret i64 %tmp.8
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 define i32 @test19(i32 %X, i32 %Y) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 ; CHECK-LABEL: @test19(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
232 ; CHECK-NEXT: ret i32 [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
233 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
234 %Z = sub i32 %X, %Y
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
235 %Q = add i32 %Z, %Y
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
236 ret i32 %Q
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 define i1 @test20(i32 %g, i32 %h) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 ; CHECK-LABEL: @test20(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
241 ; CHECK-NEXT: [[TMP_4:%.*]] = icmp ne i32 [[H:%.*]], 0
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
242 ; CHECK-NEXT: ret i1 [[TMP_4]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
243 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
244 %tmp.2 = sub i32 %g, %h
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
245 %tmp.4 = icmp ne i32 %tmp.2, %g
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
246 ret i1 %tmp.4
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 define i1 @test21(i32 %g, i32 %h) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 ; CHECK-LABEL: @test21(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
251 ; CHECK-NEXT: [[TMP_4:%.*]] = icmp ne i32 [[H:%.*]], 0
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
252 ; CHECK-NEXT: ret i1 [[TMP_4]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
253 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
254 %tmp.2 = sub i32 %g, %h
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
255 %tmp.4 = icmp ne i32 %tmp.2, %g
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
256 ret i1 %tmp.4
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 ; PR2298
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 define zeroext i1 @test22(i32 %a, i32 %b) nounwind {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 ; CHECK-LABEL: @test22(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
262 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[B:%.*]], [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
263 ; CHECK-NEXT: ret i1 [[TMP5]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
264 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
265 %tmp2 = sub i32 0, %a
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
266 %tmp4 = sub i32 0, %b
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
267 %tmp5 = icmp eq i32 %tmp2, %tmp4
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
268 ret i1 %tmp5
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 ; rdar://7362831
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 define i32 @test23(i8* %P, i64 %A){
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
273 ; CHECK-LABEL: @test23(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
274 ; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[A:%.*]] to i32
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
275 ; CHECK-NEXT: ret i32 [[TMP1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
276 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
277 %B = getelementptr inbounds i8, i8* %P, i64 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 %C = ptrtoint i8* %B to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 %D = trunc i64 %C to i32
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 %E = ptrtoint i8* %P to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 %F = trunc i64 %E to i32
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 %G = sub i32 %D, %F
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 ret i32 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 define i8 @test23_as1(i8 addrspace(1)* %P, i16 %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
287 ; CHECK-LABEL: @test23_as1(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
288 ; CHECK-NEXT: [[TMP1:%.*]] = trunc i16 [[A:%.*]] to i8
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
289 ; CHECK-NEXT: ret i8 [[TMP1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
290 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
291 %B = getelementptr inbounds i8, i8 addrspace(1)* %P, i16 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 %C = ptrtoint i8 addrspace(1)* %B to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 %D = trunc i16 %C to i8
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 %E = ptrtoint i8 addrspace(1)* %P to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 %F = trunc i16 %E to i8
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 %G = sub i8 %D, %F
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 ret i8 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
299
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 define i64 @test24(i8* %P, i64 %A){
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
301 ; CHECK-LABEL: @test24(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
302 ; CHECK-NEXT: ret i64 [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
303 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
304 %B = getelementptr inbounds i8, i8* %P, i64 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 %C = ptrtoint i8* %B to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 %E = ptrtoint i8* %P to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 %G = sub i64 %C, %E
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 ret i64 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 define i16 @test24_as1(i8 addrspace(1)* %P, i16 %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
312 ; CHECK-LABEL: @test24_as1(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
313 ; CHECK-NEXT: ret i16 [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
314 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
315 %B = getelementptr inbounds i8, i8 addrspace(1)* %P, i16 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 %C = ptrtoint i8 addrspace(1)* %B to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 %E = ptrtoint i8 addrspace(1)* %P to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 %G = sub i16 %C, %E
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 ret i16 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 define i64 @test24a(i8* %P, i64 %A){
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
323 ; CHECK-LABEL: @test24a(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
324 ; CHECK-NEXT: [[DIFF_NEG:%.*]] = sub i64 0, [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
325 ; CHECK-NEXT: ret i64 [[DIFF_NEG]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
326 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
327 %B = getelementptr inbounds i8, i8* %P, i64 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 %C = ptrtoint i8* %B to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 %E = ptrtoint i8* %P to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 %G = sub i64 %E, %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 ret i64 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
333
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 define i16 @test24a_as1(i8 addrspace(1)* %P, i16 %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
335 ; CHECK-LABEL: @test24a_as1(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
336 ; CHECK-NEXT: [[DIFF_NEG:%.*]] = sub i16 0, [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
337 ; CHECK-NEXT: ret i16 [[DIFF_NEG]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
338 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
339 %B = getelementptr inbounds i8, i8 addrspace(1)* %P, i16 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 %C = ptrtoint i8 addrspace(1)* %B to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 %E = ptrtoint i8 addrspace(1)* %P to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 %G = sub i16 %E, %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 ret i16 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
346
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 @Arr = external global [42 x i16]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 define i64 @test24b(i8* %P, i64 %A){
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
350 ; CHECK-LABEL: @test24b(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
351 ; CHECK-NEXT: [[B_IDX:%.*]] = shl nuw i64 [[A:%.*]], 1
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
352 ; CHECK-NEXT: ret i64 [[B_IDX]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
353 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
354 %B = getelementptr inbounds [42 x i16], [42 x i16]* @Arr, i64 0, i64 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 %C = ptrtoint i16* %B to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 %G = sub i64 %C, ptrtoint ([42 x i16]* @Arr to i64)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 ret i64 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 define i64 @test25(i8* %P, i64 %A){
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
362 ; CHECK-LABEL: @test25(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
363 ; CHECK-NEXT: [[B_IDX:%.*]] = shl nuw i64 [[A:%.*]], 1
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
364 ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[B_IDX]], -84
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
365 ; CHECK-NEXT: ret i64 [[TMP1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
366 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
367 %B = getelementptr inbounds [42 x i16], [42 x i16]* @Arr, i64 0, i64 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 %C = ptrtoint i16* %B to i64
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
369 %G = sub i64 %C, ptrtoint (i16* getelementptr ([42 x i16], [42 x i16]* @Arr, i64 1, i64 0) to i64)
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 ret i64 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
372
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 @Arr_as1 = external addrspace(1) global [42 x i16]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
374
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 define i16 @test25_as1(i8 addrspace(1)* %P, i64 %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
376 ; CHECK-LABEL: @test25_as1(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
377 ; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[A:%.*]] to i16
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
378 ; CHECK-NEXT: [[B_IDX:%.*]] = shl nuw i16 [[TMP1]], 1
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
379 ; CHECK-NEXT: [[TMP2:%.*]] = add i16 [[B_IDX]], -84
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
380 ; CHECK-NEXT: ret i16 [[TMP2]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
381 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
382 %B = getelementptr inbounds [42 x i16], [42 x i16] addrspace(1)* @Arr_as1, i64 0, i64 %A
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 %C = ptrtoint i16 addrspace(1)* %B to i16
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
384 %G = sub i16 %C, ptrtoint (i16 addrspace(1)* getelementptr ([42 x i16], [42 x i16] addrspace(1)* @Arr_as1, i64 1, i64 0) to i16)
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 ret i16 %G
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 define i32 @test26(i32 %x) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
389 ; CHECK-LABEL: @test26(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
390 ; CHECK-NEXT: [[NEG:%.*]] = shl i32 -3, [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
391 ; CHECK-NEXT: ret i32 [[NEG]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
392 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 %shl = shl i32 3, %x
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 %neg = sub i32 0, %shl
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 ret i32 %neg
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 define i32 @test27(i32 %x, i32 %y) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
399 ; CHECK-LABEL: @test27(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
400 ; CHECK-NEXT: [[TMP1:%.*]] = shl i32 [[Y:%.*]], 3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
401 ; CHECK-NEXT: [[SUB:%.*]] = add i32 [[TMP1]], [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
402 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
403 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 %mul = mul i32 %y, -8
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 %sub = sub i32 %x, %mul
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 ret i32 %sub
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
409 define <2 x i32> @test27vec(<2 x i32> %x, <2 x i32> %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
410 ; CHECK-LABEL: @test27vec(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
411 ; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i32> [[Y:%.*]], <i32 8, i32 6>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
412 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i32> [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
413 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
414 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
415 %mul = mul <2 x i32> %y, <i32 -8, i32 -6>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
416 %sub = sub <2 x i32> %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
417 ret <2 x i32> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
418 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
419
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
420 define <2 x i32> @test27vecsplat(<2 x i32> %x, <2 x i32> %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
421 ; CHECK-LABEL: @test27vecsplat(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
422 ; CHECK-NEXT: [[TMP1:%.*]] = shl <2 x i32> [[Y:%.*]], <i32 3, i32 3>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
423 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i32> [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
424 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
425 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
426 %mul = mul <2 x i32> %y, <i32 -8, i32 -8>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
427 %sub = sub <2 x i32> %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
428 ret <2 x i32> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
429 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
430
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
431 define <2 x i32> @test27vecmixed(<2 x i32> %x, <2 x i32> %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
432 ; CHECK-LABEL: @test27vecmixed(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
433 ; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i32> [[Y:%.*]], <i32 8, i32 -8>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
434 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i32> [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
435 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
436 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
437 %mul = mul <2 x i32> %y, <i32 -8, i32 8>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
438 %sub = sub <2 x i32> %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
439 ret <2 x i32> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
440 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
441
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
442 define i32 @test27commuted(i32 %x, i32 %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
443 ; CHECK-LABEL: @test27commuted(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
444 ; CHECK-NEXT: [[TMP1:%.*]] = shl i32 [[Y:%.*]], 3
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
445 ; CHECK-NEXT: [[SUB:%.*]] = add i32 [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
446 ; CHECK-NEXT: ret i32 [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
447 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
448 %mul = mul i32 -8, %y
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
449 %sub = sub i32 %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
450 ret i32 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
451 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
452
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
453 define <2 x i32> @test27commutedvec(<2 x i32> %x, <2 x i32> %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
454 ; CHECK-LABEL: @test27commutedvec(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
455 ; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i32> [[Y:%.*]], <i32 8, i32 6>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
456 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i32> [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
457 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
458 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
459 %mul = mul <2 x i32> <i32 -8, i32 -6>, %y
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
460 %sub = sub <2 x i32> %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
461 ret <2 x i32> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
462 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
463
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
464 define <2 x i32> @test27commutedvecsplat(<2 x i32> %x, <2 x i32> %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
465 ; CHECK-LABEL: @test27commutedvecsplat(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
466 ; CHECK-NEXT: [[TMP1:%.*]] = shl <2 x i32> [[Y:%.*]], <i32 3, i32 3>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
467 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i32> [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
468 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
469 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
470 %mul = mul <2 x i32> <i32 -8, i32 -8>, %y
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
471 %sub = sub <2 x i32> %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
472 ret <2 x i32> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
473 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
474
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
475 define <2 x i32> @test27commutedvecmixed(<2 x i32> %x, <2 x i32> %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
476 ; CHECK-LABEL: @test27commutedvecmixed(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
477 ; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i32> [[Y:%.*]], <i32 8, i32 -8>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
478 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i32> [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
479 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
480 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
481 %mul = mul <2 x i32> <i32 -8, i32 8>, %y
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
482 %sub = sub <2 x i32> %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
483 ret <2 x i32> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
484 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
485
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 define i32 @test28(i32 %x, i32 %y, i32 %z) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
487 ; CHECK-LABEL: @test28(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
488 ; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[Z:%.*]], [[Y:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
489 ; CHECK-NEXT: [[SUB:%.*]] = add i32 [[TMP1]], [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
490 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
491 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 %neg = sub i32 0, %z
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 %mul = mul i32 %neg, %y
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 %sub = sub i32 %x, %mul
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 ret i32 %sub
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
497
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
498 define i32 @test28commuted(i32 %x, i32 %y, i32 %z) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
499 ; CHECK-LABEL: @test28commuted(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
500 ; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[Y:%.*]], [[Z:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
501 ; CHECK-NEXT: [[SUB:%.*]] = add i32 [[TMP1]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
502 ; CHECK-NEXT: ret i32 [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
503 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
504 %neg = sub i32 0, %z
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
505 %mul = mul i32 %y, %neg
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
506 %sub = sub i32 %x, %mul
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
507 ret i32 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
508 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
509
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 define i64 @test29(i8* %foo, i64 %i, i64 %j) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
511 ; CHECK-LABEL: @test29(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
512 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[I:%.*]], [[J:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
513 ; CHECK-NEXT: ret i64 [[TMP1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
514 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
515 %gep1 = getelementptr inbounds i8, i8* %foo, i64 %i
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
516 %gep2 = getelementptr inbounds i8, i8* %foo, i64 %j
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 %cast1 = ptrtoint i8* %gep1 to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 %cast2 = ptrtoint i8* %gep2 to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 %sub = sub i64 %cast1, %cast2
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 ret i64 %sub
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
522
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 define i64 @test30(i8* %foo, i64 %i, i64 %j) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
524 ; CHECK-LABEL: @test30(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
525 ; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nuw i64 [[I:%.*]], 2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
526 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[GEP1_IDX]], [[J:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
527 ; CHECK-NEXT: ret i64 [[TMP1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
528 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 %bit = bitcast i8* %foo to i32*
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
530 %gep1 = getelementptr inbounds i32, i32* %bit, i64 %i
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
531 %gep2 = getelementptr inbounds i8, i8* %foo, i64 %j
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 %cast1 = ptrtoint i32* %gep1 to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 %cast2 = ptrtoint i8* %gep2 to i64
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 %sub = sub i64 %cast1, %cast2
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 ret i64 %sub
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
537
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 define i16 @test30_as1(i8 addrspace(1)* %foo, i16 %i, i16 %j) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 ; CHECK-LABEL: @test30_as1(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
540 ; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nuw i16 [[I:%.*]], 2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
541 ; CHECK-NEXT: [[TMP1:%.*]] = sub i16 [[GEP1_IDX]], [[J:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
542 ; CHECK-NEXT: ret i16 [[TMP1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
543 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 %bit = bitcast i8 addrspace(1)* %foo to i32 addrspace(1)*
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
545 %gep1 = getelementptr inbounds i32, i32 addrspace(1)* %bit, i16 %i
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
546 %gep2 = getelementptr inbounds i8, i8 addrspace(1)* %foo, i16 %j
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 %cast1 = ptrtoint i32 addrspace(1)* %gep1 to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 %cast2 = ptrtoint i8 addrspace(1)* %gep2 to i16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 %sub = sub i16 %cast1, %cast2
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 ret i16 %sub
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
553 define <2 x i64> @test31(<2 x i64> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
554 ; CHECK-LABEL: @test31(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
555 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i64> [[A:%.*]], <i64 3, i64 4>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
556 ; CHECK-NEXT: ret <2 x i64> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
557 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
558 %xor = xor <2 x i64> %A, <i64 -1, i64 -1>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
559 %sub = sub <2 x i64> <i64 2, i64 3>, %xor
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
560 ret <2 x i64> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
561 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
563 define <2 x i64> @test32(<2 x i64> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
564 ; CHECK-LABEL: @test32(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
565 ; CHECK-NEXT: [[SUB:%.*]] = sub <2 x i64> <i64 3, i64 4>, [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
566 ; CHECK-NEXT: ret <2 x i64> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
567 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
568 %add = add <2 x i64> %A, <i64 -1, i64 -1>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
569 %sub = sub <2 x i64> <i64 2, i64 3>, %add
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
570 ret <2 x i64> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
571 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
572
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
573 define <2 x i64> @test33(<2 x i1> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
574 ; CHECK-LABEL: @test33(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
575 ; CHECK-NEXT: [[SUB:%.*]] = sext <2 x i1> [[A:%.*]] to <2 x i64>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
576 ; CHECK-NEXT: ret <2 x i64> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
577 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
578 %ext = zext <2 x i1> %A to <2 x i64>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
579 %sub = sub <2 x i64> zeroinitializer, %ext
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
580 ret <2 x i64> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
581 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
582
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
583 define <2 x i64> @test34(<2 x i1> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
584 ; CHECK-LABEL: @test34(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
585 ; CHECK-NEXT: [[SUB:%.*]] = zext <2 x i1> [[A:%.*]] to <2 x i64>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
586 ; CHECK-NEXT: ret <2 x i64> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
587 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
588 %ext = sext <2 x i1> %A to <2 x i64>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
589 %sub = sub <2 x i64> zeroinitializer, %ext
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
590 ret <2 x i64> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
591 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
592
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
593 define <2 x i64> @test35(<2 x i64> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
594 ; CHECK-LABEL: @test35(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
595 ; CHECK-NEXT: [[SUB:%.*]] = mul <2 x i64> [[A:%.*]], <i64 -2, i64 -3>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
596 ; CHECK-NEXT: ret <2 x i64> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
597 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
598 %mul = mul <2 x i64> %A, <i64 3, i64 4>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
599 %sub = sub <2 x i64> %A, %mul
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
600 ret <2 x i64> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
601 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
602
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
603 define <2 x i64> @test36(<2 x i64> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
604 ; CHECK-LABEL: @test36(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
605 ; CHECK-NEXT: [[SUB:%.*]] = mul <2 x i64> [[A:%.*]], <i64 7, i64 15>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
606 ; CHECK-NEXT: ret <2 x i64> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
607 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
608 %shl = shl <2 x i64> %A, <i64 3, i64 4>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
609 %sub = sub <2 x i64> %shl, %A
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
610 ret <2 x i64> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
611 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
612
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
613 define <2 x i32> @test37(<2 x i32> %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
614 ; CHECK-LABEL: @test37(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
615 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 -2147483648, i32 -2147483648>
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
616 ; CHECK-NEXT: [[SUB:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i32>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
617 ; CHECK-NEXT: ret <2 x i32> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
618 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
619 %div = sdiv <2 x i32> %A, <i32 -2147483648, i32 -2147483648>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
620 %sub = sub nsw <2 x i32> zeroinitializer, %div
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
621 ret <2 x i32> %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
622 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
623
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
624 define i32 @test38(i32 %A) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
625 ; CHECK-LABEL: @test38(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
626 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[A:%.*]], -2147483648
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
627 ; CHECK-NEXT: [[SUB:%.*]] = sext i1 [[TMP1]] to i32
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
628 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
629 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
630 %div = sdiv i32 %A, -2147483648
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
631 %sub = sub nsw i32 0, %div
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
632 ret i32 %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
633 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
634
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
635 define i32 @test39(i32 %A, i32 %x) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
636 ; CHECK-LABEL: @test39(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
637 ; CHECK-NEXT: [[C:%.*]] = add i32 [[X:%.*]], [[A:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
638 ; CHECK-NEXT: ret i32 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
639 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
640 %B = sub i32 0, %A
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
641 %C = sub nsw i32 %x, %B
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
642 ret i32 %C
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
643 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
644
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
645 define i16 @test40(i16 %a, i16 %b) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
646 ; CHECK-LABEL: @test40(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
647 ; CHECK-NEXT: [[ASHR:%.*]] = ashr i16 [[A:%.*]], 1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
648 ; CHECK-NEXT: [[ASHR1:%.*]] = ashr i16 [[B:%.*]], 1
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
649 ; CHECK-NEXT: [[SUB:%.*]] = sub nsw i16 [[ASHR]], [[ASHR1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
650 ; CHECK-NEXT: ret i16 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
651 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
652 %ashr = ashr i16 %a, 1
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
653 %ashr1 = ashr i16 %b, 1
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
654 %sub = sub i16 %ashr, %ashr1
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
655 ret i16 %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
656 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
657
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
658 define i32 @test41(i16 %a, i16 %b) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
659 ; CHECK-LABEL: @test41(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
660 ; CHECK-NEXT: [[CONV:%.*]] = sext i16 [[A:%.*]] to i32
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
661 ; CHECK-NEXT: [[CONV1:%.*]] = sext i16 [[B:%.*]] to i32
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
662 ; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[CONV]], [[CONV1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
663 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
664 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
665 %conv = sext i16 %a to i32
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
666 %conv1 = sext i16 %b to i32
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
667 %sub = sub i32 %conv, %conv1
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
668 ret i32 %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
669 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
670
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
671 define i4 @test42(i4 %x, i4 %y) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
672 ; CHECK-LABEL: @test42(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
673 ; CHECK-NEXT: [[A:%.*]] = and i4 [[Y:%.*]], 7
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
674 ; CHECK-NEXT: [[B:%.*]] = and i4 [[X:%.*]], 7
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
675 ; CHECK-NEXT: [[C:%.*]] = sub nsw i4 [[A]], [[B]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
676 ; CHECK-NEXT: ret i4 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
677 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
678 %a = and i4 %y, 7
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
679 %b = and i4 %x, 7
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
680 %c = sub i4 %a, %b
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
681 ret i4 %c
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
682 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
683
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
684 define i4 @test43(i4 %x, i4 %y) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
685 ; CHECK-LABEL: @test43(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
686 ; CHECK-NEXT: [[A:%.*]] = or i4 [[X:%.*]], -8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
687 ; CHECK-NEXT: [[B:%.*]] = and i4 [[Y:%.*]], 7
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
688 ; CHECK-NEXT: [[C:%.*]] = sub nuw i4 [[A]], [[B]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
689 ; CHECK-NEXT: ret i4 [[C]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
690 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
691 %a = or i4 %x, -8
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
692 %b = and i4 %y, 7
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
693 %c = sub i4 %a, %b
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
694 ret i4 %c
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
695 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
696
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
697 define i32 @test44(i32 %x) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
698 ; CHECK-LABEL: @test44(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
699 ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[X:%.*]], -32768
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
700 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
701 ;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
702 %sub = sub nsw i32 %x, 32768
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
703 ret i32 %sub
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
704 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
705
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
706 define i32 @test45(i32 %x, i32 %y) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
707 ; CHECK-LABEL: @test45(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
708 ; CHECK-NEXT: [[SUB:%.*]] = and i32 [[X:%.*]], [[Y:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
709 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
710 ;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
711 %or = or i32 %x, %y
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
712 %xor = xor i32 %x, %y
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
713 %sub = sub i32 %or, %xor
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
714 ret i32 %sub
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
715 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
716
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
717 define i32 @test45commuted(i32 %x, i32 %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
718 ; CHECK-LABEL: @test45commuted(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
719 ; CHECK-NEXT: [[SUB:%.*]] = and i32 [[Y:%.*]], [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
720 ; CHECK-NEXT: ret i32 [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
721 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
722 %or = or i32 %x, %y
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
723 %xor = xor i32 %y, %x
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
724 %sub = sub i32 %or, %xor
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
725 ret i32 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
726 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
727
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
728 define i32 @test46(i32 %x, i32 %y) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
729 ; CHECK-LABEL: @test46(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
730 ; CHECK-NEXT: [[X_NOT:%.*]] = xor i32 [[X:%.*]], -1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
731 ; CHECK-NEXT: [[SUB:%.*]] = and i32 [[X_NOT]], [[Y:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
732 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
733 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
734 %or = or i32 %x, %y
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
735 %sub = sub i32 %or, %x
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
736 ret i32 %sub
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
737 }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
738
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
739 define i32 @test46commuted(i32 %x, i32 %y) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
740 ; CHECK-LABEL: @test46commuted(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
741 ; CHECK-NEXT: [[X_NOT:%.*]] = xor i32 [[X:%.*]], -1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
742 ; CHECK-NEXT: [[SUB:%.*]] = and i32 [[X_NOT]], [[Y:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
743 ; CHECK-NEXT: ret i32 [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
744 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
745 %or = or i32 %y, %x
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
746 %sub = sub i32 %or, %x
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
747 ret i32 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
748 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
749
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
750 define i32 @test47(i1 %A, i32 %B, i32 %C, i32 %D) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
751 ; CHECK-LABEL: @test47(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
752 ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[D:%.*]], [[C:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
753 ; CHECK-NEXT: [[SUB:%.*]] = select i1 [[A:%.*]], i32 [[TMP1]], i32 0
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
754 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
755 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
756 %sel0 = select i1 %A, i32 %D, i32 %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
757 %sel1 = select i1 %A, i32 %C, i32 %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
758 %sub = sub i32 %sel0, %sel1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
759 ret i32 %sub
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
760 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
761
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
762 define i32 @test48(i1 %A, i32 %B, i32 %C, i32 %D) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
763 ; CHECK-LABEL: @test48(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
764 ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[D:%.*]], [[C:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
765 ; CHECK-NEXT: [[SUB:%.*]] = select i1 [[A:%.*]], i32 0, i32 [[TMP1]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
766 ; CHECK-NEXT: ret i32 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
767 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
768 %sel0 = select i1 %A, i32 %B, i32 %D
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
769 %sel1 = select i1 %A, i32 %B, i32 %C
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
770 %sub = sub i32 %sel0, %sel1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
771 ret i32 %sub
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
772 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
773
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
774 ; Zext+add is more canonical than sext+sub.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
775
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
776 define i8 @bool_sext_sub(i8 %x, i1 %y) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
777 ; CHECK-LABEL: @bool_sext_sub(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
778 ; CHECK-NEXT: [[TMP1:%.*]] = zext i1 [[Y:%.*]] to i8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
779 ; CHECK-NEXT: [[SUB:%.*]] = add i8 [[TMP1]], [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
780 ; CHECK-NEXT: ret i8 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
781 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
782 %sext = sext i1 %y to i8
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
783 %sub = sub i8 %x, %sext
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
784 ret i8 %sub
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
785 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
786
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
787 ; Vectors get the same transform.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
788
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
789 define <2 x i8> @bool_sext_sub_vec(<2 x i8> %x, <2 x i1> %y) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
790 ; CHECK-LABEL: @bool_sext_sub_vec(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
791 ; CHECK-NEXT: [[TMP1:%.*]] = zext <2 x i1> [[Y:%.*]] to <2 x i8>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
792 ; CHECK-NEXT: [[SUB:%.*]] = add <2 x i8> [[TMP1]], [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
793 ; CHECK-NEXT: ret <2 x i8> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
794 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
795 %sext = sext <2 x i1> %y to <2 x i8>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
796 %sub = sub <2 x i8> %x, %sext
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
797 ret <2 x i8> %sub
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
798 }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
799
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
800 ; NSW is preserved.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
801
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
802 define <2 x i8> @bool_sext_sub_vec_nsw(<2 x i8> %x, <2 x i1> %y) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
803 ; CHECK-LABEL: @bool_sext_sub_vec_nsw(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
804 ; CHECK-NEXT: [[TMP1:%.*]] = zext <2 x i1> [[Y:%.*]] to <2 x i8>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
805 ; CHECK-NEXT: [[SUB:%.*]] = add nsw <2 x i8> [[TMP1]], [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
806 ; CHECK-NEXT: ret <2 x i8> [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
807 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
808 %sext = sext <2 x i1> %y to <2 x i8>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
809 %sub = sub nsw <2 x i8> %x, %sext
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
810 ret <2 x i8> %sub
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
811 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
812
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
813 ; We favor the canonical zext+add over keeping the NUW.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
814
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
815 define i8 @bool_sext_sub_nuw(i8 %x, i1 %y) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
816 ; CHECK-LABEL: @bool_sext_sub_nuw(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
817 ; CHECK-NEXT: [[TMP1:%.*]] = zext i1 [[Y:%.*]] to i8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
818 ; CHECK-NEXT: [[SUB:%.*]] = add i8 [[TMP1]], [[X:%.*]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
819 ; CHECK-NEXT: ret i8 [[SUB]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
820 ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
821 %sext = sext i1 %y to i8
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
822 %sub = sub nuw i8 %x, %sext
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
823 ret i8 %sub
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
824 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
825
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
826 define i32 @test49(i32 %X) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
827 ; CHECK-LABEL: @test49(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
828 ; CHECK-NEXT: [[SUB:%.*]] = sub i32 1, [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
829 ; CHECK-NEXT: [[RES:%.*]] = and i32 [[SUB]], 64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
830 ; CHECK-NEXT: ret i32 [[RES]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
831 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
832 %sub = sub i32 129, %X
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
833 %res = and i32 %sub, 64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
834 ret i32 %res
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
835 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
836
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
837 define i32 @test50(i32 %X) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
838 ; CHECK-LABEL: @test50(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
839 ; CHECK-NEXT: [[SUB:%.*]] = sub i32 1, [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
840 ; CHECK-NEXT: [[RES:%.*]] = and i32 [[SUB]], 127
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
841 ; CHECK-NEXT: ret i32 [[RES]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
842 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
843 %sub = sub i32 129, %X
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
844 %res = and i32 %sub, 127
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
845 ret i32 %res
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
846 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
847
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
848 define i32 @test51(i32 %X) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
849 ; CHECK-LABEL: @test51(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
850 ; CHECK-NEXT: [[SUB:%.*]] = sub i32 126, [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
851 ; CHECK-NEXT: [[RES:%.*]] = and i32 [[SUB]], 64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
852 ; CHECK-NEXT: ret i32 [[RES]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
853 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
854 %sub = sub i32 254, %X
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
855 %res = and i32 %sub, 64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
856 ret i32 %res
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
857 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
858
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
859 define i32 @test52(i32 %X) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
860 ; CHECK-LABEL: @test52(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
861 ; CHECK-NEXT: [[SUB:%.*]] = sub i32 126, [[X:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
862 ; CHECK-NEXT: [[RES:%.*]] = and i32 [[SUB]], 127
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
863 ; CHECK-NEXT: ret i32 [[RES]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
864 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
865 %sub = sub i32 254, %X
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
866 %res = and i32 %sub, 127
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
867 ret i32 %res
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
868 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
869
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
870 define <2 x i1> @test53(<2 x i1> %A, <2 x i1> %B) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
871 ; CHECK-LABEL: @test53(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
872 ; CHECK-NEXT: [[SUB:%.*]] = xor <2 x i1> [[A:%.*]], [[B:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
873 ; CHECK-NEXT: ret <2 x i1> [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
874 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
875 %sub = sub <2 x i1> %A, %B
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
876 ret <2 x i1> %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
877 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
878
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
879 define i32 @test54(i1 %C) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
880 ; CHECK-LABEL: @test54(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
881 ; CHECK-NEXT: [[V:%.*]] = select i1 [[C:%.*]], i32 -877, i32 113
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
882 ; CHECK-NEXT: ret i32 [[V]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
883 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
884 %A = select i1 %C, i32 1000, i32 10
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
885 %V = sub i32 123, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
886 ret i32 %V
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
887 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
888
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
889 define <2 x i32> @test54vec(i1 %C) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
890 ; CHECK-LABEL: @test54vec(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
891 ; CHECK-NEXT: [[V:%.*]] = select i1 [[C:%.*]], <2 x i32> <i32 -877, i32 -877>, <2 x i32> <i32 113, i32 113>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
892 ; CHECK-NEXT: ret <2 x i32> [[V]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
893 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
894 %A = select i1 %C, <2 x i32> <i32 1000, i32 1000>, <2 x i32> <i32 10, i32 10>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
895 %V = sub <2 x i32> <i32 123, i32 123>, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
896 ret <2 x i32> %V
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
897 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
898
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
899 define <2 x i32> @test54vec2(i1 %C) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
900 ; CHECK-LABEL: @test54vec2(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
901 ; CHECK-NEXT: [[V:%.*]] = select i1 [[C:%.*]], <2 x i32> <i32 -877, i32 -2167>, <2 x i32> <i32 113, i32 303>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
902 ; CHECK-NEXT: ret <2 x i32> [[V]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
903 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
904 %A = select i1 %C, <2 x i32> <i32 1000, i32 2500>, <2 x i32> <i32 10, i32 30>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
905 %V = sub <2 x i32> <i32 123, i32 333>, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
906 ret <2 x i32> %V
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
907 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
908
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
909 define i32 @test55(i1 %which) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
910 ; CHECK-LABEL: @test55(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
911 ; CHECK-NEXT: entry:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
912 ; CHECK-NEXT: br i1 [[WHICH:%.*]], label [[FINAL:%.*]], label [[DELAY:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
913 ; CHECK: delay:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
914 ; CHECK-NEXT: br label [[FINAL]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
915 ; CHECK: final:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
916 ; CHECK-NEXT: [[A:%.*]] = phi i32 [ -877, [[ENTRY:%.*]] ], [ 113, [[DELAY]] ]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
917 ; CHECK-NEXT: ret i32 [[A]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
918 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
919 entry:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
920 br i1 %which, label %final, label %delay
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
921
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
922 delay:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
923 br label %final
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
924
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
925 final:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
926 %A = phi i32 [ 1000, %entry ], [ 10, %delay ]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
927 %value = sub i32 123, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
928 ret i32 %value
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
929 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
930
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
931 define <2 x i32> @test55vec(i1 %which) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
932 ; CHECK-LABEL: @test55vec(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
933 ; CHECK-NEXT: entry:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
934 ; CHECK-NEXT: br i1 [[WHICH:%.*]], label [[FINAL:%.*]], label [[DELAY:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
935 ; CHECK: delay:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
936 ; CHECK-NEXT: br label [[FINAL]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
937 ; CHECK: final:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
938 ; CHECK-NEXT: [[A:%.*]] = phi <2 x i32> [ <i32 -877, i32 -877>, [[ENTRY:%.*]] ], [ <i32 113, i32 113>, [[DELAY]] ]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
939 ; CHECK-NEXT: ret <2 x i32> [[A]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
940 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
941 entry:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
942 br i1 %which, label %final, label %delay
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
943
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
944 delay:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
945 br label %final
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
946
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
947 final:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
948 %A = phi <2 x i32> [ <i32 1000, i32 1000>, %entry ], [ <i32 10, i32 10>, %delay ]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
949 %value = sub <2 x i32> <i32 123, i32 123>, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
950 ret <2 x i32> %value
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
951 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
952
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
953 define <2 x i32> @test55vec2(i1 %which) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
954 ; CHECK-LABEL: @test55vec2(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
955 ; CHECK-NEXT: entry:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
956 ; CHECK-NEXT: br i1 [[WHICH:%.*]], label [[FINAL:%.*]], label [[DELAY:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
957 ; CHECK: delay:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
958 ; CHECK-NEXT: br label [[FINAL]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
959 ; CHECK: final:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
960 ; CHECK-NEXT: [[A:%.*]] = phi <2 x i32> [ <i32 -877, i32 -2167>, [[ENTRY:%.*]] ], [ <i32 113, i32 303>, [[DELAY]] ]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
961 ; CHECK-NEXT: ret <2 x i32> [[A]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
962 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
963 entry:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
964 br i1 %which, label %final, label %delay
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
965
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
966 delay:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
967 br label %final
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
968
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
969 final:
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
970 %A = phi <2 x i32> [ <i32 1000, i32 2500>, %entry ], [ <i32 10, i32 30>, %delay ]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
971 %value = sub <2 x i32> <i32 123, i32 333>, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
972 ret <2 x i32> %value
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
973 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
974
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
975 define i32 @test56(i32 %A, i32 %B) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
976 ; CHECK-LABEL: @test56(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
977 ; CHECK-NEXT: [[Y:%.*]] = sub i32 0, [[B:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
978 ; CHECK-NEXT: ret i32 [[Y]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
979 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
980 %X = add i32 %A, %B
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
981 %Y = sub i32 %A, %X
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
982 ret i32 %Y }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
983
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
984 define i32 @test57(i32 %A, i32 %B) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
985 ; CHECK-LABEL: @test57(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
986 ; CHECK-NEXT: [[Y:%.*]] = sub i32 0, [[B:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
987 ; CHECK-NEXT: ret i32 [[Y]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
988 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
989 %X = add i32 %B, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
990 %Y = sub i32 %A, %X
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
991 ret i32 %Y }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
992
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
993 @dummy_global1 = external global i8*
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
994 @dummy_global2 = external global i8*
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
995
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
996 define i64 @test58([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
997 ; CHECK-LABEL: @test58(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
998 ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[J:%.*]], 4200
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
999 ; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[I:%.*]], 4200
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1000 ; CHECK-NEXT: [[TMP3:%.*]] = sub i64 [[TMP2:%.*]] [[TMP1:%.*]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1001 ; CHECK-NEXT: ret i64 [[TMP3]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1002 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1003 ; Note the reassociate pass and another instcombine pass will further optimize this to
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1004 ; "%sub = i64 %i, %j, ret i64 %sub"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1005 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1006 ; gep1 and gep2 have only one use
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1007 %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1008 %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %j
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1009 %cast1 = ptrtoint i8* %gep1 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1010 %cast2 = ptrtoint i8* %gep2 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1011 %sub = sub i64 %cast1, %cast2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1012 ret i64 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1013 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1014
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1015 define i64 @test59([100 x [100 x i8]]* %foo, i64 %i) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1016 ; CHECK-LABEL: @test59(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1017 ; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1018 ; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1019 ; CHECK-NEXT: store i8* [[GEP1]], i8** @dummy_global1, align 8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1020 ; CHECK-NEXT: store i8* [[GEP2]], i8** @dummy_global2, align 8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1021 ; CHECK-NEXT: ret i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1022 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1023 ; gep1 and gep2 have more than one uses
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1024 %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1025 %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1026 %cast1 = ptrtoint i8* %gep1 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1027 %cast2 = ptrtoint i8* %gep2 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1028 %sub = sub i64 %cast1, %cast2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1029 store i8* %gep1, i8** @dummy_global1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1030 store i8* %gep2, i8** @dummy_global2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1031 ret i64 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1032 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1033
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1034 define i64 @test60([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1035 ; CHECK-LABEL: @test60(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1036 ; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 %j, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1037 ; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1038 ; CHECK-NEXT: [[CAST1:%.*]] = ptrtoint i8* [[GEP1]] to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1039 ; CHECK-NEXT: [[CAST2:%.*]] = ptrtoint i8* [[GEP2]] to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1040 ; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[CAST1]], [[CAST2]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1041 ; CHECK-NEXT: store i8* [[GEP1]], i8** @dummy_global1, align 8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1042 ; CHECK-NEXT: ret i64 [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1043 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1044 ; gep1 has a non-constant index and more than one uses. Shouldn't duplicate the arithmetic.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1045 %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 %j, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1046 %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1047 %cast1 = ptrtoint i8* %gep1 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1048 %cast2 = ptrtoint i8* %gep2 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1049 %sub = sub i64 %cast1, %cast2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1050 store i8* %gep1, i8** @dummy_global1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1051 ret i64 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1052 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1053
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1054 define i64 @test61([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1055 ; CHECK-LABEL: @test61(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1056 ; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1057 ; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 %j, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1058 ; CHECK-NEXT: [[CAST1:%.*]] = ptrtoint i8* [[GEP1]] to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1059 ; CHECK-NEXT: [[CAST2:%.*]] = ptrtoint i8* [[GEP2]] to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1060 ; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[CAST1]], [[CAST2]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1061 ; CHECK-NEXT: store i8* [[GEP2]], i8** @dummy_global2, align 8
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1062 ; CHECK-NEXT: ret i64 [[SUB]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1063 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1064 ; gep2 has a non-constant index and more than one uses. Shouldn't duplicate the arithmetic.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1065 %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1066 %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 %j, i64 %i
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1067 %cast1 = ptrtoint i8* %gep1 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1068 %cast2 = ptrtoint i8* %gep2 to i64
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1069 %sub = sub i64 %cast1, %cast2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1070 store i8* %gep2, i8** @dummy_global2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1071 ret i64 %sub
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1072 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1073
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1074 define i32 @test62(i32 %A) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1075 ; CHECK-LABEL: @test62(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1076 ; CHECK-NEXT: [[B:%.*]] = shl i32 [[A:%.*]], 1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1077 ; CHECK-NEXT: [[C:%.*]] = sub i32 2, [[B]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1078 ; CHECK-NEXT: ret i32 [[C]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1079 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1080 %B = sub i32 1, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1081 %C = shl i32 %B, 1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1082 ret i32 %C
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1083 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1084
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1085 define <2 x i32> @test62vec(<2 x i32> %A) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1086 ; CHECK-LABEL: @test62vec(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1087 ; CHECK-NEXT: [[B:%.*]] = shl <2 x i32> [[A:%.*]], <i32 1, i32 1>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1088 ; CHECK-NEXT: [[C:%.*]] = sub <2 x i32> <i32 2, i32 2>, [[B]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1089 ; CHECK-NEXT: ret <2 x i32> [[C]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1090 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1091 %B = sub <2 x i32> <i32 1, i32 1>, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1092 %C = shl <2 x i32> %B, <i32 1, i32 1>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1093 ret <2 x i32> %C
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1094 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1095
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1096 define i32 @test63(i32 %A) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1097 ; CHECK-LABEL: @test63(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1098 ; CHECK-NEXT: [[B:%.*]] = shl i32 [[A:%.*]], 1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1099 ; CHECK-NEXT: ret i32 [[B]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1100 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1101 %B = sub i32 1, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1102 %C = shl i32 %B, 1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1103 %D = sub i32 2, %C
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1104 ret i32 %D
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1105 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1106
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1107 define <2 x i32> @test63vec(<2 x i32> %A) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1108 ; CHECK-LABEL: @test63vec(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1109 ; CHECK-NEXT: [[B:%.*]] = shl <2 x i32> [[A:%.*]], <i32 1, i32 1>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1110 ; CHECK-NEXT: ret <2 x i32> [[B]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1111 ;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1112 %B = sub <2 x i32> <i32 1, i32 1>, %A
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1113 %C = shl <2 x i32> %B, <i32 1, i32 1>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1114 %D = sub <2 x i32> <i32 2, i32 2>, %C
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1115 ret <2 x i32> %D
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1116 }