4
4
define i32 @test_or_fshl (i32 %a , i32 %b , i32 %c , i32 %d , i32 %sh ) {
5
5
; CHECK-LABEL: define i32 @test_or_fshl(
6
6
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
7
- ; CHECK-NEXT: [[VAL1 :%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
8
- ; CHECK-NEXT: [[VAL2 :%.*]] = call i32 @llvm.fshl.i32(i32 [[C ]], i32 [[D]], i32 [[SH]])
9
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[VAL1 ]], [[VAL2]]
7
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i32 [[A]], [[C]]
8
+ ; CHECK-NEXT: [[TMP2 :%.*]] = or i32 [[B ]], [[D]]
9
+ ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP1 ]], i32 [[TMP2]], i32 [[SH]])
10
10
; CHECK-NEXT: ret i32 [[RET]]
11
11
;
12
12
%val1 = call i32 @llvm.fshl.i32 (i32 %a , i32 %b , i32 %sh )
@@ -17,9 +17,9 @@ define i32 @test_or_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
17
17
define i32 @test_and_fshl (i32 %a , i32 %b , i32 %c , i32 %d , i32 %sh ) {
18
18
; CHECK-LABEL: define i32 @test_and_fshl(
19
19
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
20
- ; CHECK-NEXT: [[VAL1 :%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
21
- ; CHECK-NEXT: [[VAL2 :%.*]] = call i32 @llvm.fshl.i32(i32 [[C ]], i32 [[D]], i32 [[SH]])
22
- ; CHECK-NEXT: [[RET:%.*]] = and i32 [[VAL1 ]], [[VAL2]]
20
+ ; CHECK-NEXT: [[TMP1 :%.*]] = and i32 [[A]], [[C]]
21
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[B ]], [[D]]
22
+ ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP1 ]], i32 [[TMP2]], i32 [[SH]])
23
23
; CHECK-NEXT: ret i32 [[RET]]
24
24
;
25
25
%val1 = call i32 @llvm.fshl.i32 (i32 %a , i32 %b , i32 %sh )
@@ -30,9 +30,9 @@ define i32 @test_and_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
30
30
define i32 @test_xor_fshl (i32 %a , i32 %b , i32 %c , i32 %d , i32 %sh ) {
31
31
; CHECK-LABEL: define i32 @test_xor_fshl(
32
32
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
33
- ; CHECK-NEXT: [[VAL1 :%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
34
- ; CHECK-NEXT: [[VAL2 :%.*]] = call i32 @llvm.fshl.i32(i32 [[C ]], i32 [[D]], i32 [[SH]])
35
- ; CHECK-NEXT: [[RET:%.*]] = xor i32 [[VAL1 ]], [[VAL2]]
33
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i32 [[A]], [[C]]
34
+ ; CHECK-NEXT: [[TMP2 :%.*]] = xor i32 [[B ]], [[D]]
35
+ ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP1 ]], i32 [[TMP2]], i32 [[SH]])
36
36
; CHECK-NEXT: ret i32 [[RET]]
37
37
;
38
38
%val1 = call i32 @llvm.fshl.i32 (i32 %a , i32 %b , i32 %sh )
@@ -43,9 +43,9 @@ define i32 @test_xor_fshl(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
43
43
define i32 @test_or_fshr (i32 %a , i32 %b , i32 %c , i32 %d , i32 %sh ) {
44
44
; CHECK-LABEL: define i32 @test_or_fshr(
45
45
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]], i32 [[SH:%.*]]) {
46
- ; CHECK-NEXT: [[VAL1 :%.*]] = call i32 @llvm.fshr.i32(i32 [[A]], i32 [[B]], i32 [[SH]])
47
- ; CHECK-NEXT: [[VAL2 :%.*]] = call i32 @llvm.fshr.i32(i32 [[C ]], i32 [[D]], i32 [[SH]])
48
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[VAL1 ]], [[VAL2]]
46
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i32 [[A]], [[C]]
47
+ ; CHECK-NEXT: [[TMP2 :%.*]] = or i32 [[B ]], [[D]]
48
+ ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.fshr.i32(i32 [[TMP1 ]], i32 [[TMP2]], i32 [[SH]])
49
49
; CHECK-NEXT: ret i32 [[RET]]
50
50
;
51
51
%val1 = call i32 @llvm.fshr.i32 (i32 %a , i32 %b , i32 %sh )
@@ -56,11 +56,11 @@ define i32 @test_or_fshr(i32 %a, i32 %b, i32 %c, i32 %d, i32 %sh) {
56
56
define i32 @test_or_fshl_cascade (i32 %a , i32 %b , i32 %c ) {
57
57
; CHECK-LABEL: define i32 @test_or_fshl_cascade(
58
58
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
59
- ; CHECK-NEXT: [[FSHL1 :%.*]] = call i32 @llvm.fshl.i32(i32 [[A]], i32 [[A]], i32 24)
60
- ; CHECK-NEXT: [[FSHL2 :%.*]] = call i32 @llvm.fshl.i32(i32 [[B ]], i32 [[B]], i32 24)
61
- ; CHECK-NEXT: [[FSHL3 :%.*]] = call i32 @llvm.fshl.i32(i32 [[C ]], i32 [[C]], i32 24)
62
- ; CHECK-NEXT: [[OR1 :%.*]] = or i32 [[FSHL1 ]], [[FSHL2 ]]
63
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[OR1 ]], [[FSHL3]]
59
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i32 [[A]], [[B]]
60
+ ; CHECK-NEXT: [[TMP2 :%.*]] = or i32 [[A ]], [[B]]
61
+ ; CHECK-NEXT: [[TMP3 :%.*]] = or i32 [[TMP1 ]], [[C]]
62
+ ; CHECK-NEXT: [[TMP4 :%.*]] = or i32 [[TMP2 ]], [[C ]]
63
+ ; CHECK-NEXT: [[OR2:%.*]] = call i32 @llvm.fshl.i32(i32 [[TMP3 ]], i32 [[TMP4]], i32 24)
64
64
; CHECK-NEXT: ret i32 [[OR2]]
65
65
;
66
66
%fshl1 = call i32 @llvm.fshl.i32 (i32 %a , i32 %a , i32 24 )
@@ -73,9 +73,8 @@ define i32 @test_or_fshl_cascade(i32 %a, i32 %b, i32 %c) {
73
73
define i32 @test_or_bitreverse (i32 %a , i32 %b ) {
74
74
; CHECK-LABEL: define i32 @test_or_bitreverse(
75
75
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
76
- ; CHECK-NEXT: [[VAL1:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[A]])
77
- ; CHECK-NEXT: [[VAL2:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[B]])
78
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[VAL1]], [[VAL2]]
76
+ ; CHECK-NEXT: [[TMP1:%.*]] = or i32 [[A]], [[B]]
77
+ ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[TMP1]])
79
78
; CHECK-NEXT: ret i32 [[RET]]
80
79
;
81
80
%val1 = call i32 @llvm.bitreverse.i32 (i32 %a )
@@ -86,8 +85,8 @@ define i32 @test_or_bitreverse(i32 %a, i32 %b) {
86
85
define i32 @test_or_bitreverse_constant (i32 %a , i32 %b ) {
87
86
; CHECK-LABEL: define i32 @test_or_bitreverse_constant(
88
87
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
89
- ; CHECK-NEXT: [[VAL1 :%.*]] = call i32 @llvm.bitreverse.i32(i32 [[A]])
90
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[VAL1]], -16777216
88
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i32 [[A]], 255
89
+ ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[TMP1]])
91
90
; CHECK-NEXT: ret i32 [[RET]]
92
91
;
93
92
%val1 = call i32 @llvm.bitreverse.i32 (i32 %a )
0 commit comments