brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 8b2f91b Raw
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