brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · c73c369 Raw
329 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s3 4declare void @llvm.assume(i1)5define <2 x i1> @select_v_ne_z(<2 x i8> %v, <2 x i8> %yy) {6; CHECK-LABEL: @select_v_ne_z(7; CHECK-NEXT:    ret <2 x i1> zeroinitializer8;9  %y = or <2 x i8> %yy, <i8 1, i8 1>10  %cmp = icmp ne <2 x i8> %v, zeroinitializer11  %s = select <2 x i1> %cmp, <2 x i8> %v, <2 x i8> %y12  %r = icmp eq <2 x i8> %s, zeroinitializer13  ret <2 x i1> %r14}15 16define i1 @select_v_ne_fail(i8 %v, i8 %y) {17; CHECK-LABEL: @select_v_ne_fail(18; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 019; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])20; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i8 [[V:%.*]], 121; CHECK-NEXT:    [[S:%.*]] = select i1 [[CMP]], i8 [[V]], i8 [[Y]]22; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[S]], 023; CHECK-NEXT:    ret i1 [[R]]24;25  %ynz = icmp ne i8 %y, 026  call void @llvm.assume(i1 %ynz)27  %cmp = icmp ne i8 %v, 128  %s = select i1 %cmp, i8 %v, i8 %y29  %r = icmp eq i8 %s, 030  ret i1 %r31}32 33define i1 @select_v_eq_nz(i8 %v, i8 %y) {34; CHECK-LABEL: @select_v_eq_nz(35; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 036; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])37; CHECK-NEXT:    ret i1 false38;39  %ynz = icmp ne i8 %y, 040  call void @llvm.assume(i1 %ynz)41  %cmp = icmp eq i8 44, %v42  %s = select i1 %cmp, i8 %v, i8 %y43  %r = icmp eq i8 %s, 044  ret i1 %r45}46 47define i1 @inv_select_v_ugt_nz(i8 %v, i8 %C, i8 %y) {48; CHECK-LABEL: @inv_select_v_ugt_nz(49; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 050; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])51; CHECK-NEXT:    ret i1 false52;53  %ynz = icmp ne i8 %y, 054  call void @llvm.assume(i1 %ynz)55  %cmp = icmp ugt i8 14, %v56  %s = select i1 %cmp, i8 %y, i8 %v57  %r = icmp eq i8 %s, 058  ret i1 %r59}60 61define i1 @inv_select_v_ugt_fail(i8 %v, i8 %C, i8 %y) {62; CHECK-LABEL: @inv_select_v_ugt_fail(63; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 064; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])65; CHECK-NEXT:    ret i1 false66;67  %ynz = icmp ne i8 %y, 068  call void @llvm.assume(i1 %ynz)69  %cmp = icmp ugt i8 -2, %v70  %s = select i1 %cmp, i8 %y, i8 %v71  %r = icmp eq i8 %s, 072  ret i1 %r73}74 75define <2 x i1> @select_v_ult(<2 x i8> %v, <2 x i8> %C, <2 x i8> %yy) {76; CHECK-LABEL: @select_v_ult(77; CHECK-NEXT:    ret <2 x i1> zeroinitializer78;79  %y = or <2 x i8> %yy, <i8 1, i8 1>80  %cmp = icmp ult <2 x i8> %C, %v81  %s = select <2 x i1> %cmp, <2 x i8> %v, <2 x i8> %y82  %r = icmp eq <2 x i8> %s, zeroinitializer83  ret <2 x i1> %r84}85 86define <2 x i1> @select_v_uge_nz(<2 x i8> %v, <2 x i8> %yy) {87; CHECK-LABEL: @select_v_uge_nz(88; CHECK-NEXT:    ret <2 x i1> zeroinitializer89;90  %y = or <2 x i8> %yy, <i8 1, i8 1>91  %cmp = icmp uge <2 x i8> %v, <i8 1, i8 1>92  %s = select <2 x i1> %cmp, <2 x i8> %v, <2 x i8> %y93  %r = icmp eq <2 x i8> %s, zeroinitializer94  ret <2 x i1> %r95}96 97define i1 @inv_select_v_ule(i8 %v, i8 %y) {98; CHECK-LABEL: @inv_select_v_ule(99; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0100; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])101; CHECK-NEXT:    ret i1 false102;103  %ynz = icmp ne i8 %y, 0104  call void @llvm.assume(i1 %ynz)105  %cmp = icmp ule i8 %v, 4106  %s = select i1 %cmp, i8 %y, i8 %v107  %r = icmp eq i8 %s, 0108  ret i1 %r109}110 111define i1 @select_v_sgt_nonneg(i8 %v, i8 %y) {112; CHECK-LABEL: @select_v_sgt_nonneg(113; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0114; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])115; CHECK-NEXT:    ret i1 false116;117  %ynz = icmp ne i8 %y, 0118  call void @llvm.assume(i1 %ynz)119  %cmp = icmp sgt i8 %v, 0120  %s = select i1 %cmp, i8 %v, i8 %y121  %r = icmp eq i8 %s, 0122  ret i1 %r123}124 125define i1 @select_v_sgt_fail(i8 %v, i8 %y) {126; CHECK-LABEL: @select_v_sgt_fail(127; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0128; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])129; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[V:%.*]], -1130; CHECK-NEXT:    [[S:%.*]] = select i1 [[CMP]], i8 [[V]], i8 [[Y]]131; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[S]], 0132; CHECK-NEXT:    ret i1 [[R]]133;134  %ynz = icmp ne i8 %y, 0135  call void @llvm.assume(i1 %ynz)136  %cmp = icmp sgt i8 %v, -1137  %s = select i1 %cmp, i8 %v, i8 %y138  %r = icmp eq i8 %s, 0139  ret i1 %r140}141 142define i1 @inv_select_v_sgt_neg(i8 %v, i8 %y) {143; CHECK-LABEL: @inv_select_v_sgt_neg(144; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0145; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])146; CHECK-NEXT:    ret i1 false147;148  %ynz = icmp ne i8 %y, 0149  call void @llvm.assume(i1 %ynz)150  %cmp = icmp sgt i8 %v, -1151  %s = select i1 %cmp, i8 %y, i8 %v152  %r = icmp eq i8 %s, 0153  ret i1 %r154}155 156define i1 @inv_select_v_sgt_nonneg_nz(i8 %v, i8 %C, i8 %y) {157; CHECK-LABEL: @inv_select_v_sgt_nonneg_nz(158; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0159; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])160; CHECK-NEXT:    ret i1 false161;162  %ynz = icmp ne i8 %y, 0163  call void @llvm.assume(i1 %ynz)164  %cmp = icmp sgt i8 99, %v165  %s = select i1 %cmp, i8 %y, i8 %v166  %r = icmp eq i8 %s, 0167  ret i1 %r168}169 170define i1 @select_v_slt_nonneg(i8 %v, i8 %y) {171; CHECK-LABEL: @select_v_slt_nonneg(172; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0173; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])174; CHECK-NEXT:    ret i1 false175;176  %ynz = icmp ne i8 %y, 0177  call void @llvm.assume(i1 %ynz)178  %cmp = icmp slt i8 0, %v179  %s = select i1 %cmp, i8 %v, i8 %y180  %r = icmp eq i8 %s, 0181  ret i1 %r182}183 184define i1 @select_v_slt_nonneg_fail(i8 %v, i8 %C, i8 %y) {185; CHECK-LABEL: @select_v_slt_nonneg_fail(186; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0187; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])188; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 -1, [[V:%.*]]189; CHECK-NEXT:    [[S:%.*]] = select i1 [[CMP]], i8 [[V]], i8 [[Y]]190; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[S]], 0191; CHECK-NEXT:    ret i1 [[R]]192;193  %ynz = icmp ne i8 %y, 0194  call void @llvm.assume(i1 %ynz)195  %cmp = icmp slt i8 -1, %v196  %s = select i1 %cmp, i8 %v, i8 %y197  %r = icmp eq i8 %s, 0198  ret i1 %r199}200 201define i1 @select_v_slt_neg(i8 %v, i8 %y) {202; CHECK-LABEL: @select_v_slt_neg(203; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0204; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])205; CHECK-NEXT:    ret i1 false206;207  %ynz = icmp ne i8 %y, 0208  call void @llvm.assume(i1 %ynz)209  %cmp = icmp slt i8 %v, -1210  %s = select i1 %cmp, i8 %v, i8 %y211  %r = icmp eq i8 %s, 0212  ret i1 %r213}214 215define i1 @select_v_sge_nonneg_nz(i8 %v, i8 %y) {216; CHECK-LABEL: @select_v_sge_nonneg_nz(217; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0218; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])219; CHECK-NEXT:    ret i1 false220;221  %ynz = icmp ne i8 %y, 0222  call void @llvm.assume(i1 %ynz)223  %cmp = icmp sge i8 %v, 1224  %s = select i1 %cmp, i8 %v, i8 %y225  %r = icmp eq i8 %s, 0226  ret i1 %r227}228 229define i1 @select_v_sge_neg(i8 %v, i8 %y) {230; CHECK-LABEL: @select_v_sge_neg(231; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0232; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])233; CHECK-NEXT:    ret i1 false234;235  %ynz = icmp ne i8 %y, 0236  call void @llvm.assume(i1 %ynz)237  %cmp = icmp sge i8 -3, %v238  %s = select i1 %cmp, i8 %v, i8 %y239  %r = icmp eq i8 %s, 0240  ret i1 %r241}242 243define i1 @inv_select_v_sge_z(i8 %v, i8 %y) {244; CHECK-LABEL: @inv_select_v_sge_z(245; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0246; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])247; CHECK-NEXT:    ret i1 false248;249  %ynz = icmp ne i8 %y, 0250  call void @llvm.assume(i1 %ynz)251  %cmp = icmp sge i8 %v, 0252  %s = select i1 %cmp, i8 %y, i8 %v253  %r = icmp eq i8 %s, 0254  ret i1 %r255}256 257define i1 @inv_select_v_sge_fail(i8 %v, i8 %C, i8 %y) {258; CHECK-LABEL: @inv_select_v_sge_fail(259; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0260; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])261; CHECK-NEXT:    ret i1 false262;263  %ynz = icmp ne i8 %y, 0264  call void @llvm.assume(i1 %ynz)265  %cmp = icmp sge i8 %v, -44266  %s = select i1 %cmp, i8 %y, i8 %v267  %r = icmp eq i8 %s, 0268  ret i1 %r269}270 271define i1 @select_v_sle_neg(i8 %v, i8 %y) {272; CHECK-LABEL: @select_v_sle_neg(273; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0274; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])275; CHECK-NEXT:    ret i1 false276;277  %ynz = icmp ne i8 %y, 0278  call void @llvm.assume(i1 %ynz)279  %cmp = icmp sle i8 %v, -1280  %s = select i1 %cmp, i8 %v, i8 %y281  %r = icmp eq i8 %s, 0282  ret i1 %r283}284 285define i1 @select_v_sle_nonneg_nz(i8 %v, i8 %y) {286; CHECK-LABEL: @select_v_sle_nonneg_nz(287; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0288; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])289; CHECK-NEXT:    ret i1 false290;291  %ynz = icmp ne i8 %y, 0292  call void @llvm.assume(i1 %ynz)293  %cmp = icmp sle i8 1, %v294  %s = select i1 %cmp, i8 %v, i8 %y295  %r = icmp eq i8 %s, 0296  ret i1 %r297}298 299define i1 @select_v_sle_fail(i8 %v, i8 %y) {300; CHECK-LABEL: @select_v_sle_fail(301; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0302; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])303; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i8 0, [[V:%.*]]304; CHECK-NEXT:    [[S:%.*]] = select i1 [[CMP]], i8 [[V]], i8 [[Y]]305; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[S]], 0306; CHECK-NEXT:    ret i1 [[R]]307;308  %ynz = icmp ne i8 %y, 0309  call void @llvm.assume(i1 %ynz)310  %cmp = icmp sle i8 0, %v311  %s = select i1 %cmp, i8 %v, i8 %y312  %r = icmp eq i8 %s, 0313  ret i1 %r314}315 316define i1 @inv_select_v_sle_nonneg(i8 %v, i8 %y) {317; CHECK-LABEL: @inv_select_v_sle_nonneg(318; CHECK-NEXT:    [[YNZ:%.*]] = icmp ne i8 [[Y:%.*]], 0319; CHECK-NEXT:    call void @llvm.assume(i1 [[YNZ]])320; CHECK-NEXT:    ret i1 false321;322  %ynz = icmp ne i8 %y, 0323  call void @llvm.assume(i1 %ynz)324  %cmp = icmp sle i8 %v, 0325  %s = select i1 %cmp, i8 %y, i8 %v326  %r = icmp eq i8 %s, 0327  ret i1 %r328}329