|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
2 | 2 | ; RUN: opt < %s -instcombine -S | FileCheck %s |
3 | | -; ModuleID = 'test/Transforms/InstCombine/add4.ll' |
4 | | -source_filename = "test/Transforms/InstCombine/add4.ll" |
5 | 3 |
|
6 | 4 | define i64 @match_unsigned(i64 %x) { |
7 | 5 | ; CHECK-LABEL: @match_unsigned( |
8 | | -; CHECK-NEXT: bb: |
9 | 6 | ; CHECK-NEXT: [[UREM:%.*]] = urem i64 [[X:%.*]], 19136 |
10 | 7 | ; CHECK-NEXT: ret i64 [[UREM]] |
11 | 8 | ; |
12 | | -bb: |
13 | | - %tmp = urem i64 %x, 299 |
14 | | - %tmp1 = udiv i64 %x, 299 |
15 | | - %tmp2 = urem i64 %tmp1, 64 |
16 | | - %tmp3 = mul i64 %tmp2, 299 |
17 | | - %tmp4 = add i64 %tmp, %tmp3 |
18 | | - ret i64 %tmp4 |
| 9 | + %t = urem i64 %x, 299 |
| 10 | + %t1 = udiv i64 %x, 299 |
| 11 | + %t2 = urem i64 %t1, 64 |
| 12 | + %t3 = mul i64 %t2, 299 |
| 13 | + %t4 = add i64 %t, %t3 |
| 14 | + ret i64 %t4 |
19 | 15 | } |
20 | 16 |
|
21 | 17 | define i64 @match_andAsRem_lshrAsDiv_shlAsMul(i64 %x) { |
22 | 18 | ; CHECK-LABEL: @match_andAsRem_lshrAsDiv_shlAsMul( |
23 | | -; CHECK-NEXT: bb: |
24 | 19 | ; CHECK-NEXT: [[UREM:%.*]] = urem i64 [[X:%.*]], 576 |
25 | 20 | ; CHECK-NEXT: ret i64 [[UREM]] |
26 | 21 | ; |
27 | | -bb: |
28 | | - %tmp = and i64 %x, 63 |
29 | | - %tmp1 = lshr i64 %x, 6 |
30 | | - %tmp2 = urem i64 %tmp1, 9 |
31 | | - %tmp3 = shl i64 %tmp2, 6 |
32 | | - %tmp4 = add i64 %tmp, %tmp3 |
33 | | - ret i64 %tmp4 |
| 22 | + %t = and i64 %x, 63 |
| 23 | + %t1 = lshr i64 %x, 6 |
| 24 | + %t2 = urem i64 %t1, 9 |
| 25 | + %t3 = shl i64 %t2, 6 |
| 26 | + %t4 = add i64 %t, %t3 |
| 27 | + ret i64 %t4 |
34 | 28 | } |
35 | 29 |
|
36 | 30 | define i64 @match_signed(i64 %x) { |
37 | 31 | ; CHECK-LABEL: @match_signed( |
38 | | -; CHECK-NEXT: bb: |
39 | 32 | ; CHECK-NEXT: [[SREM1:%.*]] = srem i64 [[X:%.*]], 172224 |
40 | 33 | ; CHECK-NEXT: ret i64 [[SREM1]] |
41 | 34 | ; |
42 | | -bb: |
43 | | - %tmp = srem i64 %x, 299 |
44 | | - %tmp1 = sdiv i64 %x, 299 |
45 | | - %tmp2 = srem i64 %tmp1, 64 |
46 | | - %tmp3 = sdiv i64 %x, 19136 |
47 | | - %tmp4 = srem i64 %tmp3, 9 |
48 | | - %tmp5 = mul i64 %tmp2, 299 |
49 | | - %tmp6 = add i64 %tmp, %tmp5 |
50 | | - %tmp7 = mul i64 %tmp4, 19136 |
51 | | - %tmp8 = add i64 %tmp6, %tmp7 |
52 | | - ret i64 %tmp8 |
| 35 | + %t = srem i64 %x, 299 |
| 36 | + %t1 = sdiv i64 %x, 299 |
| 37 | + %t2 = srem i64 %t1, 64 |
| 38 | + %t3 = sdiv i64 %x, 19136 |
| 39 | + %t4 = srem i64 %t3, 9 |
| 40 | + %t5 = mul i64 %t2, 299 |
| 41 | + %t6 = add i64 %t, %t5 |
| 42 | + %t7 = mul i64 %t4, 19136 |
| 43 | + %t8 = add i64 %t6, %t7 |
| 44 | + ret i64 %t8 |
53 | 45 | } |
54 | 46 |
|
55 | 47 | define i64 @not_match_inconsistent_signs(i64 %x) { |
56 | 48 | ; CHECK-LABEL: @not_match_inconsistent_signs( |
57 | | -; CHECK-NEXT: bb: |
58 | | -; CHECK-NEXT: [[TMP:%.*]] = urem i64 [[X:%.*]], 299 |
59 | | -; CHECK-NEXT: [[TMP1:%.*]] = sdiv i64 [[X]], 299 |
60 | | -; CHECK-NEXT: [[TMP2:%.*]] = and i64 [[TMP1]], 63 |
61 | | -; CHECK-NEXT: [[TMP3:%.*]] = mul nuw nsw i64 [[TMP2]], 299 |
62 | | -; CHECK-NEXT: [[TMP4:%.*]] = add nuw nsw i64 [[TMP]], [[TMP3]] |
63 | | -; CHECK-NEXT: ret i64 [[TMP4]] |
| 49 | +; CHECK-NEXT: [[T:%.*]] = urem i64 [[X:%.*]], 299 |
| 50 | +; CHECK-NEXT: [[T1:%.*]] = sdiv i64 [[X]], 299 |
| 51 | +; CHECK-NEXT: [[T2:%.*]] = and i64 [[T1]], 63 |
| 52 | +; CHECK-NEXT: [[T3:%.*]] = mul nuw nsw i64 [[T2]], 299 |
| 53 | +; CHECK-NEXT: [[T4:%.*]] = add nuw nsw i64 [[T]], [[T3]] |
| 54 | +; CHECK-NEXT: ret i64 [[T4]] |
64 | 55 | ; |
65 | | -bb: |
66 | | - %tmp = urem i64 %x, 299 |
67 | | - %tmp1 = sdiv i64 %x, 299 |
68 | | - %tmp2 = urem i64 %tmp1, 64 |
69 | | - %tmp3 = mul i64 %tmp2, 299 |
70 | | - %tmp4 = add i64 %tmp, %tmp3 |
71 | | - ret i64 %tmp4 |
| 56 | + %t = urem i64 %x, 299 |
| 57 | + %t1 = sdiv i64 %x, 299 |
| 58 | + %t2 = urem i64 %t1, 64 |
| 59 | + %t3 = mul i64 %t2, 299 |
| 60 | + %t4 = add i64 %t, %t3 |
| 61 | + ret i64 %t4 |
72 | 62 | } |
73 | 63 |
|
74 | 64 | define i64 @not_match_inconsistent_values(i64 %x) { |
75 | 65 | ; CHECK-LABEL: @not_match_inconsistent_values( |
76 | | -; CHECK-NEXT: bb: |
77 | | -; CHECK-NEXT: [[TMP:%.*]] = urem i64 [[X:%.*]], 299 |
78 | | -; CHECK-NEXT: [[TMP1:%.*]] = udiv i64 [[X]], 29 |
79 | | -; CHECK-NEXT: [[TMP2:%.*]] = and i64 [[TMP1]], 63 |
80 | | -; CHECK-NEXT: [[TMP3:%.*]] = mul nuw nsw i64 [[TMP2]], 299 |
81 | | -; CHECK-NEXT: [[TMP4:%.*]] = add nuw nsw i64 [[TMP]], [[TMP3]] |
82 | | -; CHECK-NEXT: ret i64 [[TMP4]] |
| 66 | +; CHECK-NEXT: [[T:%.*]] = urem i64 [[X:%.*]], 299 |
| 67 | +; CHECK-NEXT: [[T1:%.*]] = udiv i64 [[X]], 29 |
| 68 | +; CHECK-NEXT: [[T2:%.*]] = and i64 [[T1]], 63 |
| 69 | +; CHECK-NEXT: [[T3:%.*]] = mul nuw nsw i64 [[T2]], 299 |
| 70 | +; CHECK-NEXT: [[T4:%.*]] = add nuw nsw i64 [[T]], [[T3]] |
| 71 | +; CHECK-NEXT: ret i64 [[T4]] |
83 | 72 | ; |
84 | | -bb: |
85 | | - %tmp = urem i64 %x, 299 |
86 | | - %tmp1 = udiv i64 %x, 29 |
87 | | - %tmp2 = urem i64 %tmp1, 64 |
88 | | - %tmp3 = mul i64 %tmp2, 299 |
89 | | - %tmp4 = add i64 %tmp, %tmp3 |
90 | | - ret i64 %tmp4 |
| 73 | + %t = urem i64 %x, 299 |
| 74 | + %t1 = udiv i64 %x, 29 |
| 75 | + %t2 = urem i64 %t1, 64 |
| 76 | + %t3 = mul i64 %t2, 299 |
| 77 | + %t4 = add i64 %t, %t3 |
| 78 | + ret i64 %t4 |
91 | 79 | } |
92 | 80 |
|
93 | 81 | define i32 @not_match_overflow(i32 %x) { |
94 | 82 | ; CHECK-LABEL: @not_match_overflow( |
95 | | -; CHECK-NEXT: bb: |
96 | | -; CHECK-NEXT: [[TMP:%.*]] = urem i32 [[X:%.*]], 299 |
97 | | -; CHECK-NEXT: [[TMP0:%.*]] = urem i32 [[X]], 299 |
98 | | -; CHECK-NEXT: [[TMP3:%.*]] = sub i32 [[X]], [[TMP0]] |
99 | | -; CHECK-NEXT: [[TMP4:%.*]] = add i32 [[TMP]], [[TMP3]] |
100 | | -; CHECK-NEXT: ret i32 [[TMP4]] |
| 83 | +; CHECK-NEXT: [[T:%.*]] = urem i32 [[X:%.*]], 299 |
| 84 | +; CHECK-NEXT: [[TMP1:%.*]] = urem i32 [[X]], 299 |
| 85 | +; CHECK-NEXT: [[T3:%.*]] = sub i32 [[X]], [[TMP1]] |
| 86 | +; CHECK-NEXT: [[T4:%.*]] = add i32 [[T]], [[T3]] |
| 87 | +; CHECK-NEXT: ret i32 [[T4]] |
101 | 88 | ; |
102 | | -bb: |
103 | | - %tmp = urem i32 %x, 299 |
104 | | - %tmp1 = udiv i32 %x,299 |
105 | | - %tmp2 = urem i32 %tmp1, 147483647 |
106 | | - %tmp3 = mul i32 %tmp2, 299 |
107 | | - %tmp4 = add i32 %tmp, %tmp3 |
108 | | - ret i32 %tmp4 |
| 89 | + %t = urem i32 %x, 299 |
| 90 | + %t1 = udiv i32 %x, 299 |
| 91 | + %t2 = urem i32 %t1, 147483647 |
| 92 | + %t3 = mul i32 %t2, 299 |
| 93 | + %t4 = add i32 %t, %t3 |
| 94 | + ret i32 %t4 |
109 | 95 | } |
0 commit comments