; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -passes=ipsccp -S %s | FileCheck %s define i8 @range_from_lshr(i8 %a) { ; CHECK-LABEL: @range_from_lshr( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[A_SHR:%.*]] = lshr i8 [[A:%.*]], 1 ; CHECK-NEXT: [[SUB_1:%.*]] = sub nsw i8 [[A_SHR]], 1 ; CHECK-NEXT: [[SUB_2:%.*]] = sub i8 [[A_SHR]], -128 ; CHECK-NEXT: [[SUB_3:%.*]] = sub i8 [[A_SHR]], -127 ; CHECK-NEXT: [[SUB_4:%.*]] = sub i8 [[A_SHR]], -1 ; CHECK-NEXT: [[RES_1:%.*]] = xor i8 [[SUB_1]], [[SUB_2]] ; CHECK-NEXT: [[RES_2:%.*]] = xor i8 [[RES_1]], [[SUB_3]] ; CHECK-NEXT: [[RES_3:%.*]] = xor i8 [[RES_2]], [[SUB_4]] ; CHECK-NEXT: ret i8 [[RES_3]] ; entry: %a.shr = lshr i8 %a, 1 %sub.1 = sub i8 %a.shr, 1 %sub.2 = sub i8 %a.shr, 128 %sub.3 = sub i8 %a.shr, 129 %sub.4 = sub i8 %a.shr, -1 %res.1 = xor i8 %sub.1, %sub.2 %res.2 = xor i8 %res.1, %sub.3 %res.3 = xor i8 %res.2, %sub.4 ret i8 %res.3 } define i8 @sub_zero(i8 %a) { ; CHECK-LABEL: @sub_zero( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[SUB_1:%.*]] = sub i8 0, [[A:%.*]] ; CHECK-NEXT: [[SUB_2:%.*]] = sub nuw nsw i8 -1, [[A]] ; CHECK-NEXT: [[SUB_3:%.*]] = sub i8 1, [[A]] ; CHECK-NEXT: [[SUB_4:%.*]] = sub i8 [[A]], -1 ; CHECK-NEXT: [[RES_1:%.*]] = xor i8 [[SUB_1]], [[SUB_2]] ; CHECK-NEXT: [[RES_2:%.*]] = xor i8 [[RES_1]], [[SUB_3]] ; CHECK-NEXT: [[RES_3:%.*]] = xor i8 [[RES_2]], [[SUB_4]] ; CHECK-NEXT: ret i8 [[RES_3]] ; entry: %sub.1 = sub i8 0, %a %sub.2 = sub i8 -1, %a %sub.3 = sub i8 1, %a %sub.4 = sub i8 %a, -1 %res.1 = xor i8 %sub.1, %sub.2 %res.2 = xor i8 %res.1, %sub.3 %res.3 = xor i8 %res.2, %sub.4 ret i8 %res.3 }