diff options
| author | David Green <david.green@arm.com> | 2019-11-17 10:32:12 +0000 | 
|---|---|---|
| committer | David Green <david.green@arm.com> | 2019-11-17 10:34:28 +0000 | 
| commit | 7bed2cb8535085cf041f6f5d0c65135a898c302e (patch) | |
| tree | 2339eab287d41087fb5c05dfbabe7c58dd913fab | |
| parent | c9276fbfdf0c7caf1576b2db562286d7cec7e53b (diff) | |
| download | bcm5719-llvm-7bed2cb8535085cf041f6f5d0c65135a898c302e.tar.gz bcm5719-llvm-7bed2cb8535085cf041f6f5d0c65135a898c302e.zip  | |
[InstCombine] Add extra tests for overflow_to_sat.ll. NFC
| -rw-r--r-- | llvm/test/Transforms/InstCombine/overflow_to_sat.ll | 76 | 
1 files changed, 76 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/overflow_to_sat.ll b/llvm/test/Transforms/InstCombine/overflow_to_sat.ll index ddafc43e89f..12ee430ecfc 100644 --- a/llvm/test/Transforms/InstCombine/overflow_to_sat.ll +++ b/llvm/test/Transforms/InstCombine/overflow_to_sat.ll @@ -410,6 +410,44 @@ define i8 @ssub_x_le_max(i8 %x, i8 %y) {    ret i8 %r  } +define i8 @ssub_x_lt2_min(i8 %x, i8 %y) { +; CHECK-LABEL: @ssub_x_lt2_min( +; CHECK-NEXT:    [[AO:%.*]] = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) +; CHECK-NEXT:    [[O:%.*]] = extractvalue { i8, i1 } [[AO]], 1 +; CHECK-NEXT:    [[A:%.*]] = extractvalue { i8, i1 } [[AO]], 0 +; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X]], -1 +; CHECK-NEXT:    [[S:%.*]] = select i1 [[C]], i8 127, i8 -128 +; CHECK-NEXT:    [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]] +; CHECK-NEXT:    ret i8 [[R]] +; +  %ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y) +  %o = extractvalue { i8, i1 } %ao, 1 +  %a = extractvalue { i8, i1 } %ao, 0 +  %c = icmp slt i8 %x, -1 +  %s = select i1 %c, i8 127, i8 -128 +  %r = select i1 %o, i8 %s, i8 %a +  ret i8 %r +} + +define i8 @ssub_x_lt2_max(i8 %x, i8 %y) { +; CHECK-LABEL: @ssub_x_lt2_max( +; CHECK-NEXT:    [[AO:%.*]] = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) +; CHECK-NEXT:    [[O:%.*]] = extractvalue { i8, i1 } [[AO]], 1 +; CHECK-NEXT:    [[A:%.*]] = extractvalue { i8, i1 } [[AO]], 0 +; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X]], -1 +; CHECK-NEXT:    [[S:%.*]] = select i1 [[C]], i8 -128, i8 127 +; CHECK-NEXT:    [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]] +; CHECK-NEXT:    ret i8 [[R]] +; +  %ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y) +  %o = extractvalue { i8, i1 } %ao, 1 +  %a = extractvalue { i8, i1 } %ao, 0 +  %c = icmp slt i8 %x, -1 +  %s = select i1 %c, i8 -128, i8 127 +  %r = select i1 %o, i8 %s, i8 %a +  ret i8 %r +} +  define i8 @ssub_x_gt_min(i8 %x, i8 %y) {  ; CHECK-LABEL: @ssub_x_gt_min(  ; CHECK-NEXT:    [[AO:%.*]] = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) @@ -486,6 +524,44 @@ define i8 @ssub_x_ge_max(i8 %x, i8 %y) {    ret i8 %r  } +define i8 @ssub_x_gt2_min(i8 %x, i8 %y) { +; CHECK-LABEL: @ssub_x_gt2_min( +; CHECK-NEXT:    [[AO:%.*]] = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) +; CHECK-NEXT:    [[O:%.*]] = extractvalue { i8, i1 } [[AO]], 1 +; CHECK-NEXT:    [[A:%.*]] = extractvalue { i8, i1 } [[AO]], 0 +; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X]], -2 +; CHECK-NEXT:    [[S:%.*]] = select i1 [[C]], i8 127, i8 -128 +; CHECK-NEXT:    [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]] +; CHECK-NEXT:    ret i8 [[R]] +; +  %ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y) +  %o = extractvalue { i8, i1 } %ao, 1 +  %a = extractvalue { i8, i1 } %ao, 0 +  %c = icmp sgt i8 %x, -2 +  %s = select i1 %c, i8 127, i8 -128 +  %r = select i1 %o, i8 %s, i8 %a +  ret i8 %r +} + +define i8 @ssub_x_gt2_max(i8 %x, i8 %y) { +; CHECK-LABEL: @ssub_x_gt2_max( +; CHECK-NEXT:    [[AO:%.*]] = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 [[X:%.*]], i8 [[Y:%.*]]) +; CHECK-NEXT:    [[O:%.*]] = extractvalue { i8, i1 } [[AO]], 1 +; CHECK-NEXT:    [[A:%.*]] = extractvalue { i8, i1 } [[AO]], 0 +; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X]], -2 +; CHECK-NEXT:    [[S:%.*]] = select i1 [[C]], i8 -128, i8 127 +; CHECK-NEXT:    [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]] +; CHECK-NEXT:    ret i8 [[R]] +; +  %ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y) +  %o = extractvalue { i8, i1 } %ao, 1 +  %a = extractvalue { i8, i1 } %ao, 0 +  %c = icmp sgt i8 %x, -2 +  %s = select i1 %c, i8 -128, i8 127 +  %r = select i1 %o, i8 %s, i8 %a +  ret i8 %r +} +  define i8 @ssub_y_lt_min(i8 %x, i8 %y) {  ; CHECK-LABEL: @ssub_y_lt_min(  | 

