@@ -49,13 +49,10 @@ define i1 @test-same-operands-sub-add-nsw-nuw-icmp-eq(i8 %a, i8 %b) {
4949 ret i1 %cmp
5050}
5151
52- ; Check not folded
5352define i1 @test-same-operands-sub-add-nsw-icmp-eq (i8 %a , i8 %b ) {
5453; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-eq(
5554; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
56- ; CHECK-NEXT: [[SUB:%.*]] = sub nsw i8 [[A]], [[B]]
57- ; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[A]], [[B]]
58- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[SUB]], [[ADD]]
55+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[B]], 0
5956; CHECK-NEXT: ret i1 [[CMP]]
6057;
6158 %sub = sub nsw i8 %a , %b
@@ -64,10 +61,13 @@ define i1 @test-same-operands-sub-add-nsw-icmp-eq(i8 %a, i8 %b) {
6461 ret i1 %cmp
6562}
6663
64+ ; Should floded by foldICmpCommutative in the future
6765define i1 @test-add-sub-nsw-icmp-sgt (i8 %a , i8 %b ) {
6866; CHECK-LABEL: define i1 @test-add-sub-nsw-icmp-sgt(
6967; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
70- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[B]], 0
68+ ; CHECK-NEXT: [[SUB:%.*]] = sub nsw i8 [[A]], [[B]]
69+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[A]], [[B]]
70+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[ADD]], [[SUB]]
7171; CHECK-NEXT: ret i1 [[CMP]]
7272;
7373 %sub = sub nsw i8 %a , %b
@@ -76,10 +76,14 @@ define i1 @test-add-sub-nsw-icmp-sgt(i8 %a, i8 %b) {
7676 ret i1 %cmp
7777}
7878
79+ ; Should floded by foldICmpCommutative in the future
7980define i1 @test-add-sub-nuw-icmp-uge (i8 %a , i8 %b ) {
8081; CHECK-LABEL: define i1 @test-add-sub-nuw-icmp-uge(
8182; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
82- ; CHECK-NEXT: ret i1 true
83+ ; CHECK-NEXT: [[SUB:%.*]] = sub nuw i8 [[A]], [[B]]
84+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[A]], [[B]]
85+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[ADD]], [[SUB]]
86+ ; CHECK-NEXT: ret i1 [[CMP]]
8387;
8488 %sub = sub nuw i8 %a , %b
8589 %add = add nuw i8 %a , %b
@@ -102,10 +106,14 @@ define i1 @test-add-sub-nuw-icmp-sge(i8 %a, i8 %b) {
102106 ret i1 %cmp
103107}
104108
109+ ; Should floded by foldICmpCommutative in the future
105110define i1 @test-add-swap-sub-nuw-icmp-uge (i8 %a , i8 %b ) {
106111; CHECK-LABEL: define i1 @test-add-swap-sub-nuw-icmp-uge(
107112; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
108- ; CHECK-NEXT: ret i1 true
113+ ; CHECK-NEXT: [[SUB:%.*]] = sub nuw i8 [[A]], [[B]]
114+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[B]], [[A]]
115+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[ADD]], [[SUB]]
116+ ; CHECK-NEXT: ret i1 [[CMP]]
109117;
110118 %sub = sub nuw i8 %a , %b
111119 %add = add nuw i8 %b , %a
0 commit comments