brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · f608fb1 Raw
220 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4declare i4 @llvm.abs.i4(i4, i1)5 6define i1 @icmp_sge_abs(i4 %arg) {7; CHECK-LABEL: @icmp_sge_abs(8; CHECK-NEXT:    ret i1 true9;10  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)11  %cmp = icmp sge i4 %abs, %arg12  ret i1 %cmp13}14 15define i1 @icmp_sge_abs_false(i4 %arg) {16; CHECK-LABEL: @icmp_sge_abs_false(17; CHECK-NEXT:    ret i1 true18;19  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)20  %cmp = icmp sge i4 %abs, %arg21  ret i1 %cmp22}23 24define i1 @icmp_eq_abs(i4 %arg) {25; CHECK-LABEL: @icmp_eq_abs(26; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i4 [[ARG:%.*]], -127; CHECK-NEXT:    ret i1 [[CMP]]28;29  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)30  %cmp = icmp eq i4 %abs, %arg31  ret i1 %cmp32}33 34define i1 @icmp_eq_abs_false(i4 %arg) {35; CHECK-LABEL: @icmp_eq_abs_false(36; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i4 [[ARG:%.*]], -737; CHECK-NEXT:    ret i1 [[CMP]]38;39  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)40  %cmp = icmp eq i4 %abs, %arg41  ret i1 %cmp42}43 44define i1 @icmp_ne_abs(i4 %arg) {45; CHECK-LABEL: @icmp_ne_abs(46; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i4 [[ARG:%.*]], 047; CHECK-NEXT:    ret i1 [[CMP]]48;49  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)50  %cmp = icmp ne i4 %abs, %arg51  ret i1 %cmp52}53 54define i1 @icmp_ne_abs_false(i4 %arg) {55; CHECK-LABEL: @icmp_ne_abs_false(56; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i4 [[ARG:%.*]], -857; CHECK-NEXT:    ret i1 [[CMP]]58;59  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)60  %cmp = icmp ne i4 %abs, %arg61  ret i1 %cmp62}63 64define i1 @icmp_sle_abs(i4 %arg) {65; CHECK-LABEL: @icmp_sle_abs(66; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i4 [[ARG:%.*]], -167; CHECK-NEXT:    ret i1 [[CMP]]68;69  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)70  %cmp = icmp sle i4 %abs, %arg71  ret i1 %cmp72}73 74define i1 @icmp_sle_abs_false(i4 %arg) {75; CHECK-LABEL: @icmp_sle_abs_false(76; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i4 [[ARG:%.*]], -777; CHECK-NEXT:    ret i1 [[CMP]]78;79  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)80  %cmp = icmp sle i4 %abs, %arg81  ret i1 %cmp82}83 84define i1 @icmp_slt_abs(i4 %arg) {85; CHECK-LABEL: @icmp_slt_abs(86; CHECK-NEXT:    ret i1 false87;88  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)89  %cmp = icmp slt i4 %abs, %arg90  ret i1 %cmp91}92 93define i1 @icmp_slt_abs_false(i4 %arg) {94; CHECK-LABEL: @icmp_slt_abs_false(95; CHECK-NEXT:    ret i1 false96;97  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)98  %cmp = icmp slt i4 %abs, %arg99  ret i1 %cmp100}101 102define i1 @icmp_sgt_abs(i4 %arg) {103; CHECK-LABEL: @icmp_sgt_abs(104; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i4 [[ARG:%.*]], 0105; CHECK-NEXT:    ret i1 [[CMP]]106;107  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)108  %cmp = icmp sgt i4 %abs, %arg109  ret i1 %cmp110}111 112define i1 @icmp_sgt_abs_false(i4 %arg) {113; CHECK-LABEL: @icmp_sgt_abs_false(114; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i4 [[ARG:%.*]], -8115; CHECK-NEXT:    ret i1 [[CMP]]116;117  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)118  %cmp = icmp sgt i4 %abs, %arg119  ret i1 %cmp120}121 122define i1 @icmp_ugt_abs(i4 %arg) {123; CHECK-LABEL: @icmp_ugt_abs(124; CHECK-NEXT:    ret i1 false125;126  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)127  %cmp = icmp ugt i4 %abs, %arg128  ret i1 %cmp129}130 131define i1 @icmp_ugt_abs_false(i4 %arg) {132; CHECK-LABEL: @icmp_ugt_abs_false(133; CHECK-NEXT:    ret i1 false134;135  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)136  %cmp = icmp ugt i4 %abs, %arg137  ret i1 %cmp138}139 140define i1 @icmp_uge_abs(i4 %arg) {141; CHECK-LABEL: @icmp_uge_abs(142; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i4 [[ARG:%.*]], -1143; CHECK-NEXT:    ret i1 [[CMP]]144;145  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)146  %cmp = icmp uge i4 %abs, %arg147  ret i1 %cmp148}149 150define i1 @icmp_uge_abs_false(i4 %arg) {151; CHECK-LABEL: @icmp_uge_abs_false(152; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i4 [[ARG:%.*]], -7153; CHECK-NEXT:    ret i1 [[CMP]]154;155  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)156  %cmp = icmp uge i4 %abs, %arg157  ret i1 %cmp158}159 160define i1 @icmp_ule_abs(i4 %arg) {161; CHECK-LABEL: @icmp_ule_abs(162; CHECK-NEXT:    ret i1 true163;164  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)165  %cmp = icmp ule i4 %abs, %arg166  ret i1 %cmp167}168 169define i1 @icmp_ule_abs_false(i4 %arg) {170; CHECK-LABEL: @icmp_ule_abs_false(171; CHECK-NEXT:    ret i1 true172;173  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)174  %cmp = icmp ule i4 %abs, %arg175  ret i1 %cmp176}177 178define i1 @icmp_ult_abs(i4 %arg) {179; CHECK-LABEL: @icmp_ult_abs(180; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i4 [[ARG:%.*]], 0181; CHECK-NEXT:    ret i1 [[CMP]]182;183  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)184  %cmp = icmp ult i4 %abs, %arg185  ret i1 %cmp186}187 188define i1 @icmp_ult_abs_false(i4 %arg) {189; CHECK-LABEL: @icmp_ult_abs_false(190; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i4 [[ARG:%.*]], -8191; CHECK-NEXT:    ret i1 [[CMP]]192;193  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 false)194  %cmp = icmp ult i4 %abs, %arg195  ret i1 %cmp196}197 198define i1 @icmp_sge_abs2(i4 %arg) {199; CHECK-LABEL: @icmp_sge_abs2(200; CHECK-NEXT:    [[X:%.*]] = mul i4 [[ARG:%.*]], [[ARG]]201; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i4 [[X]], -1202; CHECK-NEXT:    ret i1 [[CMP]]203;204  %x = mul i4 %arg, %arg ; thwart complexity-based canonicalization205  %abs = call i4 @llvm.abs.i4(i4 %x, i1 true)206  %cmp = icmp sge i4 %x, %abs207  ret i1 %cmp208}209 210define i1 @icmp_sge_abs_mismatched_op(i4 %arg, i4 %arg2) {211; CHECK-LABEL: @icmp_sge_abs_mismatched_op(212; CHECK-NEXT:    [[ABS:%.*]] = call i4 @llvm.abs.i4(i4 [[ARG:%.*]], i1 true)213; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i4 [[ABS]], [[ARG2:%.*]]214; CHECK-NEXT:    ret i1 [[CMP]]215;216  %abs = call i4 @llvm.abs.i4(i4 %arg, i1 true)217  %cmp = icmp sge i4 %abs, %arg2218  ret i1 %cmp219  }220