Skip to content

Commit 59d8f40

Browse files
committed
[ConstraintElim] Add extra tests with chained subs.
(cherry-picked from 8c7dfaf)
1 parent b206236 commit 59d8f40

File tree

1 file changed

+83
-0
lines changed
  • llvm/test/Transforms/ConstraintElimination

1 file changed

+83
-0
lines changed

llvm/test/Transforms/ConstraintElimination/sub-nuw.ll

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,86 @@ then:
417417
else:
418418
ret i1 0
419419
}
420+
421+
; FIXME: Currently gets mis-compiled.
422+
define void @sub_nuw_chained_positive_constants(i16 %a) {
423+
; CHECK-LABEL: @sub_nuw_chained_positive_constants(
424+
; CHECK-NEXT: entry:
425+
; CHECK-NEXT: [[SUB1:%.*]] = sub nuw i16 [[A:%.*]], 10
426+
; CHECK-NEXT: [[SUB2:%.*]] = sub nuw i16 [[SUB1]], 20
427+
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i16 [[SUB2]], 90
428+
; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
429+
; CHECK: exit.1:
430+
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 120
431+
; CHECK-NEXT: call void @use(i1 [[C_2]])
432+
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 121
433+
; CHECK-NEXT: call void @use(i1 [[C_3]])
434+
; CHECK-NEXT: ret void
435+
; CHECK: exit.2:
436+
; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i16 [[A]], 120
437+
; CHECK-NEXT: call void @use(i1 [[C_4]])
438+
; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i16 [[A]], 121
439+
; CHECK-NEXT: call void @use(i1 [[C_5]])
440+
; CHECK-NEXT: ret void
441+
;
442+
entry:
443+
%sub1 = sub nuw i16 %a, 10
444+
%sub2 = sub nuw i16 %sub1, 20
445+
%c.1 = icmp ugt i16 %sub2, 90
446+
br i1 %c.1, label %exit.1, label %exit.2
447+
448+
exit.1:
449+
%c.2 = icmp ugt i16 %a, 120
450+
call void @use(i1 %c.2)
451+
%c.3 = icmp ugt i16 %a, 121
452+
call void @use(i1 %c.3)
453+
ret void
454+
455+
exit.2:
456+
%c.4 = icmp ugt i16 %a, 120
457+
call void @use(i1 %c.4)
458+
%c.5 = icmp ugt i16 %a, 121
459+
call void @use(i1 %c.5)
460+
ret void
461+
}
462+
463+
; FIXME: Currently gets mis-compiled.
464+
define void @sub_nuw_chained_negative_constants(i8 %a) {
465+
; CHECK-LABEL: @sub_nuw_chained_negative_constants(
466+
; CHECK-NEXT: entry:
467+
; CHECK-NEXT: [[SUB1:%.*]] = sub nuw i8 [[A:%.*]], 10
468+
; CHECK-NEXT: [[SUB2:%.*]] = sub nuw i8 [[SUB1]], -126
469+
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[SUB2]], 20
470+
; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
471+
; CHECK: exit.1:
472+
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[A]], -96
473+
; CHECK-NEXT: call void @use(i1 [[C_2]])
474+
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[A]], -95
475+
; CHECK-NEXT: call void @use(i1 [[C_3]])
476+
; CHECK-NEXT: ret void
477+
; CHECK: exit.2:
478+
; CHECK-NEXT: call void @use(i1 true)
479+
; CHECK-NEXT: call void @use(i1 true)
480+
; CHECK-NEXT: ret void
481+
;
482+
entry:
483+
%sub1 = sub nuw i8 %a, 10
484+
%sub2 = sub nuw i8 %sub1, 130
485+
%c.1 = icmp ugt i8 %sub2, 20
486+
br i1 %c.1, label %exit.1, label %exit.2
487+
488+
exit.1:
489+
%c.2 = icmp ugt i8 %a, 160
490+
call void @use(i1 %c.2)
491+
%c.3 = icmp ugt i8 %a, 161
492+
call void @use(i1 %c.3)
493+
ret void
494+
495+
496+
exit.2:
497+
%c.4 = icmp ugt i8 %a, 160
498+
call void @use(i1 %c.4)
499+
%c.5 = icmp ugt i8 %a, 161
500+
call void @use(i1 %c.5)
501+
ret void
502+
}

0 commit comments

Comments
 (0)