summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorSam Elliott <selliott@lowrisc.org>2019-06-21 13:36:09 +0000
committerSam Elliott <selliott@lowrisc.org>2019-06-21 13:36:09 +0000
commit96c8bc7956d95c7b39fac37382e6b2a99d9fc2f1 (patch)
tree83a37c25fc777a1f95a681606f565ec0d034c035 /llvm/test/Transforms
parentaa9b6468bdc9a14f82f513e302dbd1fef1a2e90b (diff)
downloadbcm5719-llvm-96c8bc7956d95c7b39fac37382e6b2a99d9fc2f1.tar.gz
bcm5719-llvm-96c8bc7956d95c7b39fac37382e6b2a99d9fc2f1.zip
[RISCV] Add RISCV-specific TargetTransformInfo
Summary: LLVM Allows Targets to provide information that guides optimisations made to LLVM IR. This is done with callbacks on a TargetTransformInfo object. This patch adds a TargetTransformInfo class for RISC-V. This will allow us to implement RISC-V specific callbacks as they become necessary. This commit also adds the getIntImmCost callbacks, and tests them with a simple constant hoisting test. Our immediate costs are on the conservative side, for the moment, but we prevent hoisting in most circumstances anyway. Previous review was on D63007 Reviewers: asb, luismarques Reviewed By: asb Subscribers: ributzka, MaskRay, llvm-commits, Jim, benna, psnobl, jocewei, PkmX, rkruppe, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, kito-cheng, niosHD, sabuasal, apazos, simoncook, johnrusso, rbar, hiraditya, mgorny Tags: #llvm Differential Revision: https://reviews.llvm.org/D63433 llvm-svn: 364046
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/ConstantHoisting/RISCV/immediates.ll29
-rw-r--r--llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg2
2 files changed, 31 insertions, 0 deletions
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