annotate test/Transforms/InstCombine/mul.ll @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
121
803732b1fca8 LLVM 5.0
kono
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 ; RUN: opt < %s -instcombine -S | FileCheck %s
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
4 define i32 @pow2_multiplier(i32 %A) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
5 ; CHECK-LABEL: @pow2_multiplier(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
6 ; CHECK-NEXT: [[B:%.*]] = shl i32 [[A:%.*]], 1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
7 ; CHECK-NEXT: ret i32 [[B]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
8 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
9 %B = mul i32 %A, 2
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
10 ret i32 %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
13 define <2 x i32> @pow2_multiplier_vec(<2 x i32> %A) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
14 ; CHECK-LABEL: @pow2_multiplier_vec(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
15 ; CHECK-NEXT: [[B:%.*]] = shl <2 x i32> [[A:%.*]], <i32 3, i32 3>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
16 ; CHECK-NEXT: ret <2 x i32> [[B]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
17 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
18 %B = mul <2 x i32> %A, <i32 8, i32 8>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
19 ret <2 x i32> %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
22 define i8 @combine_shl(i8 %A) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
23 ; CHECK-LABEL: @combine_shl(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
24 ; CHECK-NEXT: [[C:%.*]] = shl i8 [[A:%.*]], 6
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
25 ; CHECK-NEXT: ret i8 [[C]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
26 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
27 %B = mul i8 %A, 8
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
28 %C = mul i8 %B, 8
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
29 ret i8 %C
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
32 define i32 @neg(i32 %i) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
33 ; CHECK-LABEL: @neg(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
34 ; CHECK-NEXT: [[TMP:%.*]] = sub i32 0, [[I:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
35 ; CHECK-NEXT: ret i32 [[TMP]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
36 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
37 %tmp = mul i32 %i, -1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
38 ret i32 %tmp
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
41 ; Use the sign-bit as a mask:
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
42 ; (zext (A < 0)) * B --> (A >> 31) & B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 define i32 @test10(i32 %a, i32 %b) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 ; CHECK-LABEL: @test10(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
46 ; CHECK-NEXT: [[TMP1:%.*]] = ashr i32 [[A:%.*]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
47 ; CHECK-NEXT: [[E:%.*]] = and i32 [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
48 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
49 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
50 %c = icmp slt i32 %a, 0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
51 %d = zext i1 %c to i32
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
52 %e = mul i32 %d, %b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
53 ret i32 %e
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 define i32 @test11(i32 %a, i32 %b) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ; CHECK-LABEL: @test11(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
58 ; CHECK-NEXT: [[TMP1:%.*]] = ashr i32 [[A:%.*]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
59 ; CHECK-NEXT: [[E:%.*]] = and i32 [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
60 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
61 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
62 %c = icmp sle i32 %a, -1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
63 %d = zext i1 %c to i32
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
64 %e = mul i32 %d, %b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
65 ret i32 %e
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
68 declare void @use32(i32)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
69
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 define i32 @test12(i32 %a, i32 %b) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 ; CHECK-LABEL: @test12(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
72 ; CHECK-NEXT: [[A_LOBIT:%.*]] = lshr i32 [[A:%.*]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
73 ; CHECK-NEXT: [[TMP1:%.*]] = ashr i32 [[A]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
74 ; CHECK-NEXT: [[E:%.*]] = and i32 [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
75 ; CHECK-NEXT: call void @use32(i32 [[A_LOBIT]])
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
76 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
77 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
78 %c = icmp ugt i32 %a, 2147483647
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
79 %d = zext i1 %c to i32
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
80 %e = mul i32 %d, %b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
81 call void @use32(i32 %d)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
82 ret i32 %e
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 ; rdar://7293527
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 define i32 @test15(i32 %A, i32 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 ; CHECK-LABEL: @test15(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
88 ; CHECK-NEXT: [[M:%.*]] = shl i32 [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
89 ; CHECK-NEXT: ret i32 [[M]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
90 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 %shl = shl i32 1, %B
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 %m = mul i32 %shl, %A
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 ret i32 %m
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
94 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
95
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
96 ; X * Y (when Y is a boolean) --> Y ? X : 0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
97
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
98 define i32 @mul_bool(i32 %x, i1 %y) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
99 ; CHECK-LABEL: @mul_bool(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
100 ; CHECK-NEXT: [[M:%.*]] = select i1 [[Y:%.*]], i32 [[X:%.*]], i32 0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
101 ; CHECK-NEXT: ret i32 [[M]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
102 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
103 %z = zext i1 %y to i32
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
104 %m = mul i32 %x, %z
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
105 ret i32 %m
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
106 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
107
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
108 ; Commute and test vector type.
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
109
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
110 define <2 x i32> @mul_bool_vec(<2 x i32> %x, <2 x i1> %y) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
111 ; CHECK-LABEL: @mul_bool_vec(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
112 ; CHECK-NEXT: [[M:%.*]] = select <2 x i1> [[Y:%.*]], <2 x i32> [[X:%.*]], <2 x i32> zeroinitializer
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
113 ; CHECK-NEXT: ret <2 x i32> [[M]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
114 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
115 %z = zext <2 x i1> %y to <2 x i32>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
116 %m = mul <2 x i32> %x, %z
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
117 ret <2 x i32> %m
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
118 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
119
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
120 define <2 x i32> @mul_bool_vec_commute(<2 x i32> %x, <2 x i1> %y) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
121 ; CHECK-LABEL: @mul_bool_vec_commute(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
122 ; CHECK-NEXT: [[M:%.*]] = select <2 x i1> [[Y:%.*]], <2 x i32> [[X:%.*]], <2 x i32> zeroinitializer
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
123 ; CHECK-NEXT: ret <2 x i32> [[M]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
124 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
125 %z = zext <2 x i1> %y to <2 x i32>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
126 %m = mul <2 x i32> %z, %x
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
127 ret <2 x i32> %m
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
130 ; (A >>u 31) * B --> (A >>s 31) & B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
131
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
132 define i32 @signbit_mul(i32 %a, i32 %b) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
133 ; CHECK-LABEL: @signbit_mul(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
134 ; CHECK-NEXT: [[TMP1:%.*]] = ashr i32 [[A:%.*]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
135 ; CHECK-NEXT: [[E:%.*]] = and i32 [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
136 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
137 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
138 %d = lshr i32 %a, 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
139 %e = mul i32 %d, %b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
140 ret i32 %e
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
143 define i32 @signbit_mul_commute_extra_use(i32 %a, i32 %b) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
144 ; CHECK-LABEL: @signbit_mul_commute_extra_use(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
145 ; CHECK-NEXT: [[D:%.*]] = lshr i32 [[A:%.*]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
146 ; CHECK-NEXT: [[TMP1:%.*]] = ashr i32 [[A]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
147 ; CHECK-NEXT: [[E:%.*]] = and i32 [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
148 ; CHECK-NEXT: call void @use32(i32 [[D]])
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
149 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
150 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
151 %d = lshr i32 %a, 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
152 %e = mul i32 %b, %d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
153 call void @use32(i32 %d)
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 ret i32 %e
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
155 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
156
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
157 ; (A >>u 31)) * B --> (A >>s 31) & B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
158
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
159 define <2 x i32> @signbit_mul_vec(<2 x i32> %a, <2 x i32> %b) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
160 ; CHECK-LABEL: @signbit_mul_vec(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
161 ; CHECK-NEXT: [[TMP1:%.*]] = ashr <2 x i32> [[A:%.*]], <i32 31, i32 31>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
162 ; CHECK-NEXT: [[E:%.*]] = and <2 x i32> [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
163 ; CHECK-NEXT: ret <2 x i32> [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
164 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
165 %d = lshr <2 x i32> %a, <i32 31, i32 31>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
166 %e = mul <2 x i32> %d, %b
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
167 ret <2 x i32> %e
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
168 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
169
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
170 define <2 x i32> @signbit_mul_vec_commute(<2 x i32> %a, <2 x i32> %b) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
171 ; CHECK-LABEL: @signbit_mul_vec_commute(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
172 ; CHECK-NEXT: [[TMP1:%.*]] = ashr <2 x i32> [[A:%.*]], <i32 31, i32 31>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
173 ; CHECK-NEXT: [[E:%.*]] = and <2 x i32> [[TMP1]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
174 ; CHECK-NEXT: ret <2 x i32> [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
175 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
176 %d = lshr <2 x i32> %a, <i32 31, i32 31>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
177 %e = mul <2 x i32> %b, %d
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
178 ret <2 x i32> %e
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 define i32 @test18(i32 %A, i32 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 ; CHECK-LABEL: @test18(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
183 ; CHECK-NEXT: ret i32 0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
184 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 %C = and i32 %A, 1
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 %D = and i32 %B, 1
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 %E = mul i32 %C, %D
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 %F = and i32 %E, 16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 ret i32 %F
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 declare {i32, i1} @llvm.smul.with.overflow.i32(i32, i32)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 declare void @use(i1)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 define i32 @test19(i32 %A, i32 %B) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 ; CHECK-LABEL: @test19(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
197 ; CHECK-NEXT: call void @use(i1 false)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
198 ; CHECK-NEXT: ret i32 0
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
199 ;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 %C = and i32 %A, 1
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 %D = and i32 %B, 1
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 ; It would be nice if we also started proving that this doesn't overflow.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 %E = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %C, i32 %D)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 %F = extractvalue {i32, i1} %E, 0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 %G = extractvalue {i32, i1} %E, 1
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 call void @use(i1 %G)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 %H = and i32 %F, 16
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 ret i32 %H
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 }
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
211
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
212 define <2 x i64> @test20(<2 x i64> %A) {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
213 ; CHECK-LABEL: @test20(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
214 ; CHECK-NEXT: [[TMP1:%.*]] = mul <2 x i64> [[A:%.*]], <i64 3, i64 2>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
215 ; CHECK-NEXT: [[C:%.*]] = add <2 x i64> [[TMP1]], <i64 36, i64 28>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
216 ; CHECK-NEXT: ret <2 x i64> [[C]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
217 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
218 %B = add <2 x i64> %A, <i64 12, i64 14>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
219 %C = mul <2 x i64> %B, <i64 3, i64 2>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
220 ret <2 x i64> %C
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
221 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
222
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
223 define <2 x i1> @test21(<2 x i1> %A, <2 x i1> %B) {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
224 ; CHECK-LABEL: @test21(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
225 ; CHECK-NEXT: [[C:%.*]] = and <2 x i1> [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
226 ; CHECK-NEXT: ret <2 x i1> [[C]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
227 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
228 %C = mul <2 x i1> %A, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
229 ret <2 x i1> %C
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
230 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
231
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
232 define i32 @test22(i32 %A) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
233 ; CHECK-LABEL: @test22(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
234 ; CHECK-NEXT: [[B:%.*]] = sub nsw i32 0, [[A:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
235 ; CHECK-NEXT: ret i32 [[B]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
236 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
237 %B = mul nsw i32 %A, -1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
238 ret i32 %B
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
239 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
240
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
241 define i32 @test23(i32 %A) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
242 ; CHECK-LABEL: @test23(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
243 ; CHECK-NEXT: [[C:%.*]] = mul nuw i32 [[A:%.*]], 6
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
244 ; CHECK-NEXT: ret i32 [[C]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
245 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
246 %B = shl nuw i32 %A, 1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
247 %C = mul nuw i32 %B, 3
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
248 ret i32 %C
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
249 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
250
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
251 define i32 @test24(i32 %A) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
252 ; CHECK-LABEL: @test24(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
253 ; CHECK-NEXT: [[C:%.*]] = mul nsw i32 [[A:%.*]], 6
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
254 ; CHECK-NEXT: ret i32 [[C]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
255 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
256 %B = shl nsw i32 %A, 1
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
257 %C = mul nsw i32 %B, 3
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
258 ret i32 %C
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
259 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
260
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
261 define i32 @neg_neg_mul(i32 %A, i32 %B) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
262 ; CHECK-LABEL: @neg_neg_mul(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
263 ; CHECK-NEXT: [[E:%.*]] = mul i32 [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
264 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
265 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
266 %C = sub i32 0, %A
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
267 %D = sub i32 0, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
268 %E = mul i32 %C, %D
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
269 ret i32 %E
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
270 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
271
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
272 define i32 @neg_neg_mul_nsw(i32 %A, i32 %B) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
273 ; CHECK-LABEL: @neg_neg_mul_nsw(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
274 ; CHECK-NEXT: [[E:%.*]] = mul nsw i32 [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
275 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
276 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
277 %C = sub nsw i32 0, %A
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
278 %D = sub nsw i32 0, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
279 %E = mul nsw i32 %C, %D
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
280 ret i32 %E
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
281 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
282
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
283 define i124 @neg_neg_mul_apint(i124 %A, i124 %B) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
284 ; CHECK-LABEL: @neg_neg_mul_apint(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
285 ; CHECK-NEXT: [[E:%.*]] = mul i124 [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
286 ; CHECK-NEXT: ret i124 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
287 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
288 %C = sub i124 0, %A
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
289 %D = sub i124 0, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
290 %E = mul i124 %C, %D
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
291 ret i124 %E
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
292 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
293
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
294 define i32 @neg_mul_constant(i32 %A) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
295 ; CHECK-LABEL: @neg_mul_constant(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
296 ; CHECK-NEXT: [[E:%.*]] = mul i32 [[A:%.*]], -7
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
297 ; CHECK-NEXT: ret i32 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
298 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
299 %C = sub i32 0, %A
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
300 %E = mul i32 %C, 7
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
301 ret i32 %E
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
302 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
303
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
304 define i55 @neg_mul_constant_apint(i55 %A) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
305 ; CHECK-LABEL: @neg_mul_constant_apint(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
306 ; CHECK-NEXT: [[E:%.*]] = mul i55 [[A:%.*]], -7
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
307 ; CHECK-NEXT: ret i55 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
308 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
309 %C = sub i55 0, %A
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
310 %E = mul i55 %C, 7
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
311 ret i55 %E
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
312 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
313
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
314 define <3 x i8> @neg_mul_constant_vec(<3 x i8> %a) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
315 ; CHECK-LABEL: @neg_mul_constant_vec(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
316 ; CHECK-NEXT: [[B:%.*]] = mul <3 x i8> [[A:%.*]], <i8 -5, i8 -5, i8 -5>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
317 ; CHECK-NEXT: ret <3 x i8> [[B]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
318 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
319 %A = sub <3 x i8> zeroinitializer, %a
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
320 %B = mul <3 x i8> %A, <i8 5, i8 5, i8 5>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
321 ret <3 x i8> %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
322 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
323
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
324 define <3 x i4> @neg_mul_constant_vec_weird(<3 x i4> %a) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
325 ; CHECK-LABEL: @neg_mul_constant_vec_weird(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
326 ; CHECK-NEXT: [[B:%.*]] = mul <3 x i4> [[A:%.*]], <i4 -5, i4 -5, i4 -5>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
327 ; CHECK-NEXT: ret <3 x i4> [[B]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
328 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
329 %A = sub <3 x i4> zeroinitializer, %a
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
330 %B = mul <3 x i4> %A, <i4 5, i4 5, i4 5>
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
331 ret <3 x i4> %B
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
332 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
333
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
334 define i32 @test26(i32 %A, i32 %B) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
335 ; CHECK-LABEL: @test26(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
336 ; CHECK-NEXT: [[D:%.*]] = shl nsw i32 [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
337 ; CHECK-NEXT: ret i32 [[D]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
338 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
339 %C = shl nsw i32 1, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
340 %D = mul nsw i32 %A, %C
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
341 ret i32 %D
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
342 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
343
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
344 define i32 @test27(i32 %A, i32 %B) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
345 ; CHECK-LABEL: @test27(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
346 ; CHECK-NEXT: [[D:%.*]] = shl nuw i32 [[A:%.*]], [[B:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
347 ; CHECK-NEXT: ret i32 [[D]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
348 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
349 %C = shl i32 1, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
350 %D = mul nuw i32 %A, %C
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
351 ret i32 %D
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
352 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
353
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
354 define i32 @test28(i32 %A) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
355 ; CHECK-LABEL: @test28(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
356 ; CHECK-NEXT: [[B:%.*]] = shl i32 1, [[A:%.*]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
357 ; CHECK-NEXT: [[C:%.*]] = shl i32 [[B]], [[A]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
358 ; CHECK-NEXT: ret i32 [[C]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
359 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
360 %B = shl i32 1, %A
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
361 %C = mul nsw i32 %B, %B
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
362 ret i32 %C
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
363 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
364
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
365 define i64 @test29(i31 %A, i31 %B) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
366 ; CHECK-LABEL: @test29(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
367 ; CHECK-NEXT: [[C:%.*]] = sext i31 [[A:%.*]] to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
368 ; CHECK-NEXT: [[D:%.*]] = sext i31 [[B:%.*]] to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
369 ; CHECK-NEXT: [[E:%.*]] = mul nsw i64 [[C]], [[D]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
370 ; CHECK-NEXT: ret i64 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
371 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
372 %C = sext i31 %A to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
373 %D = sext i31 %B to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
374 %E = mul i64 %C, %D
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
375 ret i64 %E
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
376 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
377
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
378 define i64 @test30(i32 %A, i32 %B) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
379 ; CHECK-LABEL: @test30(
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
380 ; CHECK-NEXT: [[C:%.*]] = zext i32 [[A:%.*]] to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
381 ; CHECK-NEXT: [[D:%.*]] = zext i32 [[B:%.*]] to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
382 ; CHECK-NEXT: [[E:%.*]] = mul nuw i64 [[C]], [[D]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
383 ; CHECK-NEXT: ret i64 [[E]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
384 ;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
385 %C = zext i32 %A to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
386 %D = zext i32 %B to i64
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
387 %E = mul i64 %C, %D
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
388 ret i64 %E
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
389 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
390
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
391 @PR22087 = external global i32
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
392 define i32 @test31(i32 %V) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
393 ; CHECK-LABEL: @test31(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
394 ; CHECK-NEXT: [[MUL:%.*]] = shl i32 [[V:%.*]], zext (i1 icmp ne (i32* inttoptr (i64 1 to i32*), i32* @PR22087) to i32)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
395 ; CHECK-NEXT: ret i32 [[MUL]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
396 ;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
397 %mul = mul i32 %V, shl (i32 1, i32 zext (i1 icmp ne (i32* inttoptr (i64 1 to i32*), i32* @PR22087) to i32))
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
398 ret i32 %mul
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
399 }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
400
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
401 define i32 @test32(i32 %X) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
402 ; CHECK-LABEL: @test32(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
403 ; CHECK-NEXT: [[MUL:%.*]] = shl i32 [[X:%.*]], 31
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
404 ; CHECK-NEXT: ret i32 [[MUL]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
405 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
406 %mul = mul nsw i32 %X, -2147483648
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
407 ret i32 %mul
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
408 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
409
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
410 define <2 x i32> @test32vec(<2 x i32> %X) {
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
411 ; CHECK-LABEL: @test32vec(
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
412 ; CHECK-NEXT: [[MUL:%.*]] = shl nsw <2 x i32> [[X:%.*]], <i32 31, i32 31>
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
413 ; CHECK-NEXT: ret <2 x i32> [[MUL]]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
414 ;
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
415 %mul = mul nsw <2 x i32> %X, <i32 -2147483648, i32 -2147483648>
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
416 ret <2 x i32> %mul
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
417 }
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
418
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
419 define i32 @test33(i32 %X) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
420 ; CHECK-LABEL: @test33(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
421 ; CHECK-NEXT: [[MUL:%.*]] = shl nsw i32 [[X:%.*]], 30
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
422 ; CHECK-NEXT: ret i32 [[MUL]]
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
423 ;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
424 %mul = mul nsw i32 %X, 1073741824
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
425 ret i32 %mul
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
426 }
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
427
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
428 define <2 x i32> @test33vec(<2 x i32> %X) {
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
429 ; CHECK-LABEL: @test33vec(
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
430 ; CHECK-NEXT: [[MUL:%.*]] = shl nsw <2 x i32> [[X:%.*]], <i32 30, i32 30>
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
431 ; CHECK-NEXT: ret <2 x i32> [[MUL]]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
432 ;
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
433 %mul = mul nsw <2 x i32> %X, <i32 1073741824, i32 1073741824>
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
434 ret <2 x i32> %mul
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
435 }
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
436
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
437 define i128 @test34(i128 %X) {
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
438 ; CHECK-LABEL: @test34(
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
439 ; CHECK-NEXT: [[MUL:%.*]] = shl nsw i128 [[X:%.*]], 1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
440 ; CHECK-NEXT: ret i128 [[MUL]]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
441 ;
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
442 %mul = mul nsw i128 %X, 2
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
443 ret i128 %mul
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
444 }