Skip to content

Commit 8c7dfaf

Browse files
committed
[ConstraintElim] Add extra tests with chained subs.
1 parent c91fab5 commit 8c7dfaf

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

0 commit comments

Comments
 (0)