diff options
| author | Sam Elliott <selliott@lowrisc.org> | 2019-06-21 13:36:09 +0000 |
|---|---|---|
| committer | Sam Elliott <selliott@lowrisc.org> | 2019-06-21 13:36:09 +0000 |
| commit | 96c8bc7956d95c7b39fac37382e6b2a99d9fc2f1 (patch) | |
| tree | 83a37c25fc777a1f95a681606f565ec0d034c035 /llvm/test/Transforms | |
| parent | aa9b6468bdc9a14f82f513e302dbd1fef1a2e90b (diff) | |
| download | bcm5719-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.ll | 29 | ||||
| -rw-r--r-- | llvm/test/Transforms/ConstantHoisting/RISCV/lit.local.cfg | 2 |
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 |

