summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/RISCV/imm-cse.ll22
-rw-r--r--llvm/test/Transforms/ConstantHoisting/RISCV/immediates.ll29
-rw-r--r--llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg2
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
OpenPOWER on IntegriCloud