summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstSimplify/signed-div-rem.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/InstSimplify/signed-div-rem.ll')
-rw-r--r--llvm/test/Transforms/InstSimplify/signed-div-rem.ll354
1 files changed, 0 insertions, 354 deletions
diff --git a/llvm/test/Transforms/InstSimplify/signed-div-rem.ll b/llvm/test/Transforms/InstSimplify/signed-div-rem.ll
deleted file mode 100644
index 5e8388ae3ba..00000000000
--- a/llvm/test/Transforms/InstSimplify/signed-div-rem.ll
+++ /dev/null
@@ -1,354 +0,0 @@
-; RUN: opt < %s -instsimplify -S | FileCheck %s
-
-define i32 @sdiv_sext_big_divisor(i8 %x) {
-; CHECK-LABEL: @sdiv_sext_big_divisor(
-; CHECK-NEXT: ret i32 0
-;
- %conv = sext i8 %x to i32
- %div = sdiv i32 %conv, 129
- ret i32 %div
-}
-
-define i32 @not_sdiv_sext_big_divisor(i8 %x) {
-; CHECK-LABEL: @not_sdiv_sext_big_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = sext i8 %x to i32
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[CONV]], 128
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %conv = sext i8 %x to i32
- %div = sdiv i32 %conv, 128
- ret i32 %div
-}
-
-define i32 @sdiv_sext_small_divisor(i8 %x) {
-; CHECK-LABEL: @sdiv_sext_small_divisor(
-; CHECK-NEXT: ret i32 0
-;
- %conv = sext i8 %x to i32
- %div = sdiv i32 %conv, -129
- ret i32 %div
-}
-
-define i32 @not_sdiv_sext_small_divisor(i8 %x) {
-; CHECK-LABEL: @not_sdiv_sext_small_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = sext i8 %x to i32
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[CONV]], -128
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %conv = sext i8 %x to i32
- %div = sdiv i32 %conv, -128
- ret i32 %div
-}
-
-define i32 @sdiv_zext_big_divisor(i8 %x) {
-; CHECK-LABEL: @sdiv_zext_big_divisor(
-; CHECK-NEXT: ret i32 0
-;
- %conv = zext i8 %x to i32
- %div = sdiv i32 %conv, 256
- ret i32 %div
-}
-
-define i32 @not_sdiv_zext_big_divisor(i8 %x) {
-; CHECK-LABEL: @not_sdiv_zext_big_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = zext i8 %x to i32
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[CONV]], 255
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %conv = zext i8 %x to i32
- %div = sdiv i32 %conv, 255
- ret i32 %div
-}
-
-define i32 @sdiv_zext_small_divisor(i8 %x) {
-; CHECK-LABEL: @sdiv_zext_small_divisor(
-; CHECK-NEXT: ret i32 0
-;
- %conv = zext i8 %x to i32
- %div = sdiv i32 %conv, -256
- ret i32 %div
-}
-
-define i32 @not_sdiv_zext_small_divisor(i8 %x) {
-; CHECK-LABEL: @not_sdiv_zext_small_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = zext i8 %x to i32
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[CONV]], -255
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %conv = zext i8 %x to i32
- %div = sdiv i32 %conv, -255
- ret i32 %div
-}
-
-define i32 @sdiv_dividend_known_smaller_than_pos_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @sdiv_dividend_known_smaller_than_pos_divisor_clear_bits(
-; CHECK-NEXT: ret i32 0
-;
- %and = and i32 %x, 253
- %div = sdiv i32 %and, 254
- ret i32 %div
-}
-
-define i32 @not_sdiv_dividend_known_smaller_than_pos_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @not_sdiv_dividend_known_smaller_than_pos_divisor_clear_bits(
-; CHECK-NEXT: [[AND:%.*]] = and i32 %x, 253
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[AND]], 253
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %and = and i32 %x, 253
- %div = sdiv i32 %and, 253
- ret i32 %div
-}
-
-define i32 @sdiv_dividend_known_smaller_than_neg_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @sdiv_dividend_known_smaller_than_neg_divisor_clear_bits(
-; CHECK-NEXT: ret i32 0
-;
- %and = and i32 %x, 253
- %div = sdiv i32 %and, -254
- ret i32 %div
-}
-
-define i32 @not_sdiv_dividend_known_smaller_than_neg_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @not_sdiv_dividend_known_smaller_than_neg_divisor_clear_bits(
-; CHECK-NEXT: [[AND:%.*]] = and i32 %x, 253
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[AND]], -253
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %and = and i32 %x, 253
- %div = sdiv i32 %and, -253
- ret i32 %div
-}
-
-define i32 @sdiv_dividend_known_smaller_than_pos_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @sdiv_dividend_known_smaller_than_pos_divisor_set_bits(
-; CHECK-NEXT: ret i32 0
-;
- %or = or i32 %x, -253
- %div = sdiv i32 %or, 254
- ret i32 %div
-}
-
-define i32 @not_sdiv_dividend_known_smaller_than_pos_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @not_sdiv_dividend_known_smaller_than_pos_divisor_set_bits(
-; CHECK-NEXT: [[OR:%.*]] = or i32 %x, -253
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[OR]], 253
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %or = or i32 %x, -253
- %div = sdiv i32 %or, 253
- ret i32 %div
-}
-
-define i32 @sdiv_dividend_known_smaller_than_neg_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @sdiv_dividend_known_smaller_than_neg_divisor_set_bits(
-; CHECK-NEXT: ret i32 0
-;
- %or = or i32 %x, -253
- %div = sdiv i32 %or, -254
- ret i32 %div
-}
-
-define i32 @not_sdiv_dividend_known_smaller_than_neg_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @not_sdiv_dividend_known_smaller_than_neg_divisor_set_bits(
-; CHECK-NEXT: [[OR:%.*]] = or i32 %x, -253
-; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[OR]], -253
-; CHECK-NEXT: ret i32 [[DIV]]
-;
- %or = or i32 %x, -253
- %div = sdiv i32 %or, -253
- ret i32 %div
-}
-
-define i32 @srem_sext_big_divisor(i8 %x) {
-; CHECK-LABEL: @srem_sext_big_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = sext i8 %x to i32
-; CHECK-NEXT: ret i32 [[CONV]]
-;
- %conv = sext i8 %x to i32
- %rem = srem i32 %conv, 129
- ret i32 %rem
-}
-
-define i32 @not_srem_sext_big_divisor(i8 %x) {
-; CHECK-LABEL: @not_srem_sext_big_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = sext i8 %x to i32
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[CONV]], 128
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %conv = sext i8 %x to i32
- %rem = srem i32 %conv, 128
- ret i32 %rem
-}
-
-define i32 @srem_sext_small_divisor(i8 %x) {
-; CHECK-LABEL: @srem_sext_small_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = sext i8 %x to i32
-; CHECK-NEXT: ret i32 [[CONV]]
-;
- %conv = sext i8 %x to i32
- %rem = srem i32 %conv, -129
- ret i32 %rem
-}
-
-define i32 @not_srem_sext_small_divisor(i8 %x) {
-; CHECK-LABEL: @not_srem_sext_small_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = sext i8 %x to i32
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[CONV]], -128
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %conv = sext i8 %x to i32
- %rem = srem i32 %conv, -128
- ret i32 %rem
-}
-
-define i32 @srem_zext_big_divisor(i8 %x) {
-; CHECK-LABEL: @srem_zext_big_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = zext i8 %x to i32
-; CHECK-NEXT: ret i32 [[CONV]]
-;
- %conv = zext i8 %x to i32
- %rem = srem i32 %conv, 256
- ret i32 %rem
-}
-
-define i32 @not_srem_zext_big_divisor(i8 %x) {
-; CHECK-LABEL: @not_srem_zext_big_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = zext i8 %x to i32
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[CONV]], 255
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %conv = zext i8 %x to i32
- %rem = srem i32 %conv, 255
- ret i32 %rem
-}
-
-define i32 @srem_zext_small_divisor(i8 %x) {
-; CHECK-LABEL: @srem_zext_small_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = zext i8 %x to i32
-; CHECK-NEXT: ret i32 [[CONV]]
-;
- %conv = zext i8 %x to i32
- %rem = srem i32 %conv, -256
- ret i32 %rem
-}
-
-define i32 @not_srem_zext_small_divisor(i8 %x) {
-; CHECK-LABEL: @not_srem_zext_small_divisor(
-; CHECK-NEXT: [[CONV:%.*]] = zext i8 %x to i32
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[CONV]], -255
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %conv = zext i8 %x to i32
- %rem = srem i32 %conv, -255
- ret i32 %rem
-}
-
-define i32 @srem_dividend_known_smaller_than_pos_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @srem_dividend_known_smaller_than_pos_divisor_clear_bits(
-; CHECK-NEXT: [[AND:%.*]] = and i32 %x, 253
-; CHECK-NEXT: ret i32 [[AND]]
-;
- %and = and i32 %x, 253
- %rem = srem i32 %and, 254
- ret i32 %rem
-}
-
-define i32 @not_srem_dividend_known_smaller_than_pos_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @not_srem_dividend_known_smaller_than_pos_divisor_clear_bits(
-; CHECK-NEXT: [[AND:%.*]] = and i32 %x, 253
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[AND]], 253
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %and = and i32 %x, 253
- %rem = srem i32 %and, 253
- ret i32 %rem
-}
-
-define i32 @srem_dividend_known_smaller_than_neg_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @srem_dividend_known_smaller_than_neg_divisor_clear_bits(
-; CHECK-NEXT: [[AND:%.*]] = and i32 %x, 253
-; CHECK-NEXT: ret i32 [[AND]]
-;
- %and = and i32 %x, 253
- %rem = srem i32 %and, -254
- ret i32 %rem
-}
-
-define i32 @not_srem_dividend_known_smaller_than_neg_divisor_clear_bits(i32 %x) {
-; CHECK-LABEL: @not_srem_dividend_known_smaller_than_neg_divisor_clear_bits(
-; CHECK-NEXT: [[AND:%.*]] = and i32 %x, 253
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[AND]], -253
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %and = and i32 %x, 253
- %rem = srem i32 %and, -253
- ret i32 %rem
-}
-
-define i32 @srem_dividend_known_smaller_than_pos_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @srem_dividend_known_smaller_than_pos_divisor_set_bits(
-; CHECK-NEXT: [[OR:%.*]] = or i32 %x, -253
-; CHECK-NEXT: ret i32 [[OR]]
-;
- %or = or i32 %x, -253
- %rem = srem i32 %or, 254
- ret i32 %rem
-}
-
-define i32 @not_srem_dividend_known_smaller_than_pos_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @not_srem_dividend_known_smaller_than_pos_divisor_set_bits(
-; CHECK-NEXT: [[OR:%.*]] = or i32 %x, -253
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[OR]], 253
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %or = or i32 %x, -253
- %rem = srem i32 %or, 253
- ret i32 %rem
-}
-
-define i32 @srem_dividend_known_smaller_than_neg_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @srem_dividend_known_smaller_than_neg_divisor_set_bits(
-; CHECK-NEXT: [[OR:%.*]] = or i32 %x, -253
-; CHECK-NEXT: ret i32 [[OR]]
-;
- %or = or i32 %x, -253
- %rem = srem i32 %or, -254
- ret i32 %rem
-}
-
-define i32 @not_srem_dividend_known_smaller_than_neg_divisor_set_bits(i32 %x) {
-; CHECK-LABEL: @not_srem_dividend_known_smaller_than_neg_divisor_set_bits(
-; CHECK-NEXT: [[OR:%.*]] = or i32 %x, -253
-; CHECK-NEXT: [[REM:%.*]] = srem i32 [[OR]], -253
-; CHECK-NEXT: ret i32 [[REM]]
-;
- %or = or i32 %x, -253
- %rem = srem i32 %or, -253
- ret i32 %rem
-}
-
-; Make sure that we're handling the minimum signed constant correctly - can't fold this.
-
-define i16 @sdiv_min_dividend(i8 %x) {
-; CHECK-LABEL: @sdiv_min_dividend(
-; CHECK-NEXT: [[Z:%.*]] = zext i8 %x to i16
-; CHECK-NEXT: [[D:%.*]] = sdiv i16 -32768, [[Z]]
-; CHECK-NEXT: ret i16 [[D]]
-;
- %z = zext i8 %x to i16
- %d = sdiv i16 -32768, %z
- ret i16 %d
-}
-
-; If the quotient is known to not be -32768, then this can fold.
-
-define i16 @sdiv_min_divisor(i8 %x) {
-; CHECK-LABEL: @sdiv_min_divisor(
-; CHECK-NEXT: ret i16 0
-;
- %z = zext i8 %x to i16
- %d = sdiv i16 %z, -32768
- ret i16 %d
-}
-
OpenPOWER on IntegriCloud