84 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i8 @and_sub(i8 %a) {5; CHECK-LABEL: @and_sub(6; CHECK-NEXT: [[RET:%.*]] = and i8 [[A:%.*]], 127; CHECK-NEXT: ret i8 [[RET]]8;9 %and1 = and i8 %a, 1510 %and2 = and i8 %a, 311 12 %ret = sub i8 %and1, %and213 ret i8 %ret14}15 16declare void @use(i8)17define i8 @and_sub_multi_use(i8 %a) {18; CHECK-LABEL: @and_sub_multi_use(19; CHECK-NEXT: [[AND1:%.*]] = and i8 [[A:%.*]], 1520; CHECK-NEXT: call void @use(i8 [[AND1]])21; CHECK-NEXT: [[AND2:%.*]] = and i8 [[A]], 322; CHECK-NEXT: call void @use(i8 [[AND2]])23; CHECK-NEXT: [[RET:%.*]] = and i8 [[A]], 1224; CHECK-NEXT: ret i8 [[RET]]25;26 %and1 = and i8 %a, 1527 call void @use(i8 %and1)28 %and2 = and i8 %a, 329 call void @use(i8 %and2)30 %ret = sub i8 %and1, %and231 ret i8 %ret32}33 34define <2 x i32> @and_sub_vec(<2 x i32> %a) {35; CHECK-LABEL: @and_sub_vec(36; CHECK-NEXT: [[RET:%.*]] = and <2 x i32> [[A:%.*]], <i32 3, i32 8>37; CHECK-NEXT: ret <2 x i32> [[RET]]38;39 %and1 = and <2 x i32> %a, <i32 11, i32 10>40 %and2 = and <2 x i32> %a, <i32 8, i32 2>41 42 %ret = sub <2 x i32> %and1, %and243 ret <2 x i32> %ret44}45 46define <2 x i32> @and_sub_vec_posion(<2 x i32> %a) {47; CHECK-LABEL: @and_sub_vec_posion(48; CHECK-NEXT: ret <2 x i32> poison49;50 %and1 = and <2 x i32> %a, <i32 11, i32 poison>51 %and2 = and <2 x i32> %a, <i32 poison, i32 2>52 53 %ret = sub <2 x i32> %and1, %and254 ret <2 x i32> %ret55}56 57define <2 x i32> @and_sub_vec_undef(<2 x i32> %a) {58; CHECK-LABEL: @and_sub_vec_undef(59; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[A:%.*]], <i32 11, i32 undef>60; CHECK-NEXT: [[AND2:%.*]] = and <2 x i32> [[A]], <i32 undef, i32 2>61; CHECK-NEXT: [[RET:%.*]] = sub <2 x i32> [[AND1]], [[AND2]]62; CHECK-NEXT: ret <2 x i32> [[RET]]63;64 %and1 = and <2 x i32> %a, <i32 11, i32 undef>65 %and2 = and <2 x i32> %a, <i32 undef, i32 2>66 67 %ret = sub <2 x i32> %and1, %and268 ret <2 x i32> %ret69}70 71define i8 @and_sub_negtive(i8 %a) {72; CHECK-LABEL: @and_sub_negtive(73; CHECK-NEXT: [[AND1:%.*]] = and i8 [[A:%.*]], 1074; CHECK-NEXT: [[AND2:%.*]] = and i8 [[A]], 975; CHECK-NEXT: [[RET:%.*]] = sub nsw i8 [[AND1]], [[AND2]]76; CHECK-NEXT: ret i8 [[RET]]77;78 %and1 = and i8 %a, 1079 %and2 = and i8 %a, 980 81 %ret = sub i8 %and1, %and282 ret i8 %ret83}84