|
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