3
3
4
4
define i32 @test_sdiv_canonicalize_op0 (i32 %x , i32 %y ) {
5
5
; CHECK-LABEL: @test_sdiv_canonicalize_op0(
6
- ; CHECK-NEXT: [[NEG :%.*]] = sub nsw i32 0 , [[X :%.*]]
7
- ; CHECK-NEXT: [[SDIV:%.*]] = sdiv i32 [[NEG]] , [[Y:%.* ]]
6
+ ; CHECK-NEXT: [[SDIV1 :%.*]] = sdiv i32 [[X:%.*]] , [[Y :%.*]]
7
+ ; CHECK-NEXT: [[SDIV:%.*]] = sub nsw i32 0 , [[SDIV1 ]]
8
8
; CHECK-NEXT: ret i32 [[SDIV]]
9
9
;
10
10
%neg = sub nsw i32 0 , %x
@@ -14,15 +14,16 @@ define i32 @test_sdiv_canonicalize_op0(i32 %x, i32 %y) {
14
14
15
15
define i32 @test_sdiv_canonicalize_op0_exact (i32 %x , i32 %y ) {
16
16
; CHECK-LABEL: @test_sdiv_canonicalize_op0_exact(
17
- ; CHECK-NEXT: [[NEG :%.*]] = sub nsw i32 0 , [[X :%.*]]
18
- ; CHECK-NEXT: [[SDIV:%.*]] = sdiv exact i32 [[NEG]] , [[Y:%.* ]]
17
+ ; CHECK-NEXT: [[SDIV1 :%.*]] = sdiv exact i32 [[X:%.*]] , [[Y :%.*]]
18
+ ; CHECK-NEXT: [[SDIV:%.*]] = sub nsw i32 0 , [[SDIV1 ]]
19
19
; CHECK-NEXT: ret i32 [[SDIV]]
20
20
;
21
21
%neg = sub nsw i32 0 , %x
22
22
%sdiv = sdiv exact i32 %neg , %y
23
23
ret i32 %sdiv
24
24
}
25
25
26
+ ; (X/-Y) is not equal to -(X/Y), don't canonicalize.
26
27
define i32 @test_sdiv_canonicalize_op1 (i32 %x , i32 %z ) {
27
28
; CHECK-LABEL: @test_sdiv_canonicalize_op1(
28
29
; CHECK-NEXT: [[Y:%.*]] = mul i32 [[Z:%.*]], 3
@@ -49,8 +50,8 @@ define i32 @test_sdiv_canonicalize_nonsw(i32 %x, i32 %y) {
49
50
50
51
define <2 x i32 > @test_sdiv_canonicalize_vec (<2 x i32 > %x , <2 x i32 > %y ) {
51
52
; CHECK-LABEL: @test_sdiv_canonicalize_vec(
52
- ; CHECK-NEXT: [[NEG :%.*]] = sub nsw <2 x i32> zeroinitializer , [[X :%.*]]
53
- ; CHECK-NEXT: [[SDIV:%.*]] = sdiv <2 x i32> [[NEG]] , [[Y:%.* ]]
53
+ ; CHECK-NEXT: [[SDIV1 :%.*]] = sdiv <2 x i32> [[X:%.*]] , [[Y :%.*]]
54
+ ; CHECK-NEXT: [[SDIV:%.*]] = sub nsw <2 x i32> zeroinitializer , [[SDIV1 ]]
54
55
; CHECK-NEXT: ret <2 x i32> [[SDIV]]
55
56
;
56
57
%neg = sub nsw <2 x i32 > <i32 0 , i32 0 >, %x
@@ -71,9 +72,8 @@ define i32 @test_sdiv_canonicalize_multiple_uses(i32 %x, i32 %y) {
71
72
ret i32 %sdiv2
72
73
}
73
74
74
- ; There is combination: (X/-CE) -> -(X/CE)
75
- ; There is another combination: -(X/CE) -> (X/-CE)
76
- ; Make sure don't combine them endless.
75
+ ; There is combination: -(X/CE) -> (X/-CE).
76
+ ; If combines (X/-CE) to -(X/CE), make sure don't combine them endless.
77
77
78
78
@X = global i32 5
79
79
0 commit comments