@@ -1067,11 +1067,7 @@ define i8 @smul_7(i8 %x, ptr %p) {
10671067
10681068define i8 @uadd_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
10691069; CHECK-LABEL: @uadd_assume_no_overflow(
1070- ; CHECK-NEXT: [[CALL1:%.*]] = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1071- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL1]], 1
1072- ; CHECK-NEXT: [[CALL:%.*]] = extractvalue { i8, i1 } [[CALL1]], 0
1073- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1074- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1070+ ; CHECK-NEXT: [[CALL:%.*]] = add nuw i8 [[A:%.*]], [[B:%.*]]
10751071; CHECK-NEXT: ret i8 [[CALL]]
10761072;
10771073 %call = call { i8 , i1 } @llvm.uadd.with.overflow.i8 (i8 %a , i8 %b )
@@ -1084,11 +1080,7 @@ define i8 @uadd_assume_no_overflow(i8 noundef %a, i8 noundef %b) {
10841080
10851081define i8 @sadd_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
10861082; CHECK-LABEL: @sadd_assume_no_overflow(
1087- ; CHECK-NEXT: [[CALL1:%.*]] = call { i8, i1 } @llvm.sadd.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1088- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL1]], 1
1089- ; CHECK-NEXT: [[CALL:%.*]] = extractvalue { i8, i1 } [[CALL1]], 0
1090- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1091- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1083+ ; CHECK-NEXT: [[CALL:%.*]] = add nsw i8 [[A:%.*]], [[B:%.*]]
10921084; CHECK-NEXT: ret i8 [[CALL]]
10931085;
10941086 %call = call { i8 , i1 } @llvm.sadd.with.overflow.i8 (i8 %a , i8 %b )
@@ -1101,11 +1093,7 @@ define i8 @sadd_assume_no_overflow(i8 noundef %a, i8 noundef %b) {
11011093
11021094define i8 @usub_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
11031095; CHECK-LABEL: @usub_assume_no_overflow(
1104- ; CHECK-NEXT: [[CALL1:%.*]] = call { i8, i1 } @llvm.usub.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1105- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL1]], 1
1106- ; CHECK-NEXT: [[CALL:%.*]] = extractvalue { i8, i1 } [[CALL1]], 0
1107- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1108- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1096+ ; CHECK-NEXT: [[CALL:%.*]] = sub nuw i8 [[A:%.*]], [[B:%.*]]
11091097; CHECK-NEXT: ret i8 [[CALL]]
11101098;
11111099 %call = call { i8 , i1 } @llvm.usub.with.overflow.i8 (i8 %a , i8 %b )
@@ -1118,11 +1106,7 @@ define i8 @usub_assume_no_overflow(i8 noundef %a, i8 noundef %b) {
11181106
11191107define i8 @ssub_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
11201108; CHECK-LABEL: @ssub_assume_no_overflow(
1121- ; CHECK-NEXT: [[CALL1:%.*]] = call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1122- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL1]], 1
1123- ; CHECK-NEXT: [[CALL:%.*]] = extractvalue { i8, i1 } [[CALL1]], 0
1124- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1125- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1109+ ; CHECK-NEXT: [[CALL:%.*]] = sub nsw i8 [[A:%.*]], [[B:%.*]]
11261110; CHECK-NEXT: ret i8 [[CALL]]
11271111;
11281112 %call = call { i8 , i1 } @llvm.ssub.with.overflow.i8 (i8 %a , i8 %b )
@@ -1135,11 +1119,7 @@ define i8 @ssub_assume_no_overflow(i8 noundef %a, i8 noundef %b) {
11351119
11361120define i8 @umul_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
11371121; CHECK-LABEL: @umul_assume_no_overflow(
1138- ; CHECK-NEXT: [[CALL1:%.*]] = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1139- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL1]], 1
1140- ; CHECK-NEXT: [[CALL:%.*]] = extractvalue { i8, i1 } [[CALL1]], 0
1141- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1142- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1122+ ; CHECK-NEXT: [[CALL:%.*]] = mul nuw i8 [[A:%.*]], [[B:%.*]]
11431123; CHECK-NEXT: ret i8 [[CALL]]
11441124;
11451125 %call = call { i8 , i1 } @llvm.umul.with.overflow.i8 (i8 %a , i8 %b )
@@ -1152,11 +1132,7 @@ define i8 @umul_assume_no_overflow(i8 noundef %a, i8 noundef %b) {
11521132
11531133define i8 @smul_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
11541134; CHECK-LABEL: @smul_assume_no_overflow(
1155- ; CHECK-NEXT: [[CALL1:%.*]] = call { i8, i1 } @llvm.smul.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1156- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL1]], 1
1157- ; CHECK-NEXT: [[CALL:%.*]] = extractvalue { i8, i1 } [[CALL1]], 0
1158- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1159- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1135+ ; CHECK-NEXT: [[CALL:%.*]] = mul nsw i8 [[A:%.*]], [[B:%.*]]
11601136; CHECK-NEXT: ret i8 [[CALL]]
11611137;
11621138 %call = call { i8 , i1 } @llvm.smul.with.overflow.i8 (i8 %a , i8 %b )
@@ -1169,11 +1145,7 @@ define i8 @smul_assume_no_overflow(i8 noundef %a, i8 noundef %b) {
11691145
11701146define i1 @ephemeral_call_assume_no_overflow (i8 noundef %a , i8 noundef %b ) {
11711147; CHECK-LABEL: @ephemeral_call_assume_no_overflow(
1172- ; CHECK-NEXT: [[CALL:%.*]] = call { i8, i1 } @llvm.smul.with.overflow.i8(i8 [[A:%.*]], i8 [[B:%.*]])
1173- ; CHECK-NEXT: [[OVERFLOW:%.*]] = extractvalue { i8, i1 } [[CALL]], 1
1174- ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[OVERFLOW]], true
1175- ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
1176- ; CHECK-NEXT: ret i1 [[NOT]]
1148+ ; CHECK-NEXT: ret i1 true
11771149;
11781150 %call = call { i8 , i1 } @llvm.smul.with.overflow.i8 (i8 %a , i8 %b )
11791151 %overflow = extractvalue { i8 , i1 } %call , 1
0 commit comments