summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/InstCombine/overflow_to_sat.ll63
1 files changed, 9 insertions, 54 deletions
diff --git a/llvm/test/Transforms/InstCombine/overflow_to_sat.ll b/llvm/test/Transforms/InstCombine/overflow_to_sat.ll
index 474c8fe6b3c..af56f5703af 100644
--- a/llvm/test/Transforms/InstCombine/overflow_to_sat.ll
+++ b/llvm/test/Transforms/InstCombine/overflow_to_sat.ll
@@ -315,12 +315,7 @@ define i8 @ssub_x_lt_min(i8 %x, i8 %y) {
define i8 @ssub_x_lt_max(i8 %x, i8 %y) {
; CHECK-LABEL: @ssub_x_lt_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]], 0
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 -128, i8 127
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -391,12 +386,7 @@ define i8 @ssub_x_lt2_min(i8 %x, i8 %y) {
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: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -448,12 +438,7 @@ define i8 @ssub_x_gt_max(i8 %x, i8 %y) {
define i8 @ssub_x_ge_min(i8 %x, i8 %y) {
; CHECK-LABEL: @ssub_x_ge_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]], -1
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 127, i8 -128
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -486,12 +471,7 @@ define i8 @ssub_x_ge_max(i8 %x, i8 %y) {
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: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -525,12 +505,7 @@ define i8 @ssub_x_gt2_max(i8 %x, i8 %y) {
define i8 @ssub_y_lt_min(i8 %x, i8 %y) {
; CHECK-LABEL: @ssub_y_lt_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 [[Y]], 0
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 127, i8 -128
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -563,12 +538,7 @@ define i8 @ssub_y_lt_max(i8 %x, i8 %y) {
define i8 @ssub_y_le_min(i8 %x, i8 %y) {
; CHECK-LABEL: @ssub_y_le_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 [[Y]], 1
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 127, i8 -128
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -620,12 +590,7 @@ define i8 @ssub_y_gt_min(i8 %x, i8 %y) {
define i8 @ssub_y_gt_max(i8 %x, i8 %y) {
; CHECK-LABEL: @ssub_y_gt_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 [[Y]], 0
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 -128, i8 127
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -658,12 +623,7 @@ define i8 @ssub_y_ge_min(i8 %x, i8 %y) {
define i8 @ssub_y_ge_max(i8 %x, i8 %y) {
; CHECK-LABEL: @ssub_y_ge_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 [[Y]], -1
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i8 -128, i8 127
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i8 [[S]], i8 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i8 @llvm.ssub.sat.i8(i8 [[X:%.*]], i8 [[Y:%.*]])
; CHECK-NEXT: ret i8 [[R]]
;
%ao = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %x, i8 %y)
@@ -692,12 +652,7 @@ define i32 @sadd_i32(i32 %x, i32 %y) {
define i32 @ssub_i32(i32 %x, i32 %y) {
; CHECK-LABEL: @ssub_i32(
-; CHECK-NEXT: [[AO:%.*]] = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
-; CHECK-NEXT: [[O:%.*]] = extractvalue { i32, i1 } [[AO]], 1
-; CHECK-NEXT: [[A:%.*]] = extractvalue { i32, i1 } [[AO]], 0
-; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[X]], 0
-; CHECK-NEXT: [[S:%.*]] = select i1 [[C]], i32 -2147483648, i32 2147483647
-; CHECK-NEXT: [[R:%.*]] = select i1 [[O]], i32 [[S]], i32 [[A]]
+; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.ssub.sat.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
; CHECK-NEXT: ret i32 [[R]]
;
%ao = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %x, i32 %y)
OpenPOWER on IntegriCloud