diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/RISCV/imm-cse.ll | 22 | ||||
-rw-r--r-- | llvm/test/Transforms/ConstantHoisting/RISCV/immediates.ll | 29 | ||||
-rw-r--r-- | llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg | 2 |
3 files changed, 42 insertions, 11 deletions
diff --git a/llvm/test/CodeGen/RISCV/imm-cse.ll b/llvm/test/CodeGen/RISCV/imm-cse.ll index 7ece29d5316..1af27f08798 100644 --- a/llvm/test/CodeGen/RISCV/imm-cse.ll +++ b/llvm/test/CodeGen/RISCV/imm-cse.ll @@ -11,19 +11,19 @@ define void @imm32_cse() nounwind { ; RV32I-LABEL: imm32_cse: ; RV32I: # %bb.0: ; RV32I-NEXT: lui a0, 1 -; RV32I-NEXT: addi a1, a0, 1 -; RV32I-NEXT: lui a2, %hi(src) -; RV32I-NEXT: lw a3, %lo(src)(a2) -; RV32I-NEXT: add a1, a3, a1 +; RV32I-NEXT: addi a0, a0, 1 +; RV32I-NEXT: lui a1, %hi(src) +; RV32I-NEXT: lw a2, %lo(src)(a1) +; RV32I-NEXT: add a2, a2, a0 ; RV32I-NEXT: lui a3, %hi(dst) -; RV32I-NEXT: sw a1, %lo(dst)(a3) -; RV32I-NEXT: addi a1, a0, 2 -; RV32I-NEXT: lw a4, %lo(src)(a2) -; RV32I-NEXT: add a1, a4, a1 -; RV32I-NEXT: sw a1, %lo(dst)(a3) -; RV32I-NEXT: addi a0, a0, 3 -; RV32I-NEXT: lw a1, %lo(src)(a2) +; RV32I-NEXT: sw a2, %lo(dst)(a3) +; RV32I-NEXT: lw a2, %lo(src)(a1) +; RV32I-NEXT: add a2, a2, a0 +; RV32I-NEXT: addi a2, a2, 1 +; RV32I-NEXT: sw a2, %lo(dst)(a3) +; RV32I-NEXT: lw a1, %lo(src)(a1) ; RV32I-NEXT: add a0, a1, a0 +; RV32I-NEXT: addi a0, a0, 2 ; RV32I-NEXT: sw a0, %lo(dst)(a3) ; RV32I-NEXT: ret %1 = load volatile i32, i32* @src diff --git a/llvm/test/Transforms/ConstantHoisting/RISCV/immediates.ll b/llvm/test/Transforms/ConstantHoisting/RISCV/immediates.ll new file mode 100644 index 00000000000..689e10e70ff --- /dev/null +++ b/llvm/test/Transforms/ConstantHoisting/RISCV/immediates.ll @@ -0,0 +1,29 @@ +; RUN: opt -mtriple=riscv32-unknown-elf -S -consthoist < %s | FileCheck %s +; RUN: opt -mtriple=riscv64-unknown-elf -S -consthoist < %s | FileCheck %s + +; Check that we don't hoist immediates with small values. +define i64 @test1(i64 %a) nounwind { +; CHECK-LABEL: test1 +; CHECK-NOT: %const = bitcast i64 2 to i64 + %1 = mul i64 %a, 2 + %2 = add i64 %1, 2 + ret i64 %2 +} + +; Check that we don't hoist immediates with small values. +define i64 @test2(i64 %a) nounwind { +; CHECK-LABEL: test2 +; CHECK-NOT: %const = bitcast i64 2047 to i64 + %1 = mul i64 %a, 2047 + %2 = add i64 %1, 2047 + ret i64 %2 +} + +; Check that we hoist immediates with large values. +define i64 @test3(i64 %a) nounwind { +; CHECK-LABEL: test3 +; CHECK: %const = bitcast i64 32767 to i64 + %1 = mul i64 %a, 32767 + %2 = add i64 %1, 32767 + ret i64 %2 +}
\ No newline at end of file diff --git a/llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg b/llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg new file mode 100644 index 00000000000..4a2fc1519cd --- /dev/null +++ b/llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg @@ -0,0 +1,2 @@ +if not 'RISCV' in config.root.targets: + config.unsupported = True
\ No newline at end of file |