diff options
| author | Nick Desaulniers <ndesaulniers@google.com> | 2019-04-26 18:45:04 +0000 |
|---|---|---|
| committer | Nick Desaulniers <ndesaulniers@google.com> | 2019-04-26 18:45:04 +0000 |
| commit | 7ab164c4a427b559a7a47fa62ef365862705f950 (patch) | |
| tree | c8aacfde9e16dcbd85708bf2424ce6f9c94b76aa /llvm/test/CodeGen/SPARC/inlineasm-output-template.ll | |
| parent | 74967cb4e04c9899601b8c84901e99e797d49135 (diff) | |
| download | bcm5719-llvm-7ab164c4a427b559a7a47fa62ef365862705f950.tar.gz bcm5719-llvm-7ab164c4a427b559a7a47fa62ef365862705f950.zip | |
[AsmPrinter] refactor to support %c w/ GlobalAddress'
Summary:
Targets like ARM, MSP430, PPC, and SystemZ have complex behavior when
printing the address of a MachineOperand::MO_GlobalAddress. Move that
handling into a new overriden method in each base class. A virtual
method was added to the base class for handling the generic case.
Refactors a few subclasses to support the target independent %a, %c, and
%n.
The patch also contains small cleanups for AVRAsmPrinter and
SystemZAsmPrinter.
It seems that NVPTXTargetLowering is possibly missing some logic to
transform GlobalAddressSDNodes for
TargetLowering::LowerAsmOperandForConstraint to handle with "i" extended
inline assembly asm constraints.
Fixes:
- https://bugs.llvm.org/show_bug.cgi?id=41402
- https://github.com/ClangBuiltLinux/linux/issues/449
Reviewers: echristo, void
Reviewed By: void
Subscribers: void, craig.topper, jholewinski, dschuff, jyknight, dylanmckay, sdardis, nemanjai, javed.absar, sbc100, jgravelle-google, eraman, kristof.beyls, hiraditya, aheejin, kbarton, fedor.sergeev, jrtc27, atanasyan, jsji, llvm-commits, kees, tpimh, nathanchance, peter.smith, srhines
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D60887
llvm-svn: 359337
Diffstat (limited to 'llvm/test/CodeGen/SPARC/inlineasm-output-template.ll')
| -rw-r--r-- | llvm/test/CodeGen/SPARC/inlineasm-output-template.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/SPARC/inlineasm-output-template.ll b/llvm/test/CodeGen/SPARC/inlineasm-output-template.ll new file mode 100644 index 00000000000..63fae9f0f38 --- /dev/null +++ b/llvm/test/CodeGen/SPARC/inlineasm-output-template.ll @@ -0,0 +1,26 @@ +; RUN: llc -mtriple=sparc-linux-gnu < %s | FileCheck %s + +; Test that %c works with immediates +; CHECK-LABEL: test_inlineasm_c_output_template0 +; CHECK: !TEST 42 +define dso_local i32 @test_inlineasm_c_output_template0() { + tail call void asm sideeffect "!TEST ${0:c}", "i"(i32 42) + ret i32 42 +} + +; Test that %c works with global address +; CHECK-LABEL: test_inlineasm_c_output_template1 +; CHECK: !TEST baz +@baz = internal global i32 0, align 4 +define dso_local i32 @test_inlineasm_c_output_template1() { + tail call void asm sideeffect "!TEST ${0:c}", "i"(i32* nonnull @baz) + ret i32 42 +} + +; Test that %n works with immediates +; CHECK-LABEL: test_inlineasm_c_output_template2 +; CHECK: !TEST -42 +define dso_local i32 @test_inlineasm_c_output_template2() { + tail call void asm sideeffect "!TEST ${0:n}", "i"(i32 42) + ret i32 42 +} |

