mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
02a0e7f7fc
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
29 lines
936 B
LLVM
29 lines
936 B
LLVM
; RUN: llc -march=nvptx < %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
|
|
; FIXME: seems this case isn't handled properly by
|
|
; SelectionDAG TargetLowering::LowerAsmOperandForConstraint?
|
|
; check: 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
|
|
}
|