diff options
Diffstat (limited to 'test/CodeGen/AArch64/inline-asm-modifiers.ll')
-rw-r--r-- | test/CodeGen/AArch64/inline-asm-modifiers.ll | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/test/CodeGen/AArch64/inline-asm-modifiers.ll b/test/CodeGen/AArch64/inline-asm-modifiers.ll index 3b55945561eb1..b7f4d3c57ba37 100644 --- a/test/CodeGen/AArch64/inline-asm-modifiers.ll +++ b/test/CodeGen/AArch64/inline-asm-modifiers.ll @@ -1,5 +1,4 @@ ; RUN: llc -mtriple=aarch64-none-linux-gnu -relocation-model=pic < %s | FileCheck %s -; RUN: llc -mtriple=aarch64-none-linux-gnu -relocation-model=pic -filetype=obj < %s | llvm-objdump -r - | FileCheck --check-prefix=CHECK-ELF %s @var_simple = hidden global i32 0 @var_got = global i32 0 @@ -9,7 +8,7 @@ @var_tlsle = thread_local(localexec) global i32 0 define void @test_inline_modifier_L() nounwind { -; CHECK: test_inline_modifier_L: +; CHECK-LABEL: test_inline_modifier_L: call void asm sideeffect "add x0, x0, ${0:L}", "S,~{x0}"(i32* @var_simple) call void asm sideeffect "ldr x0, [x0, ${0:L}]", "S,~{x0}"(i32* @var_got) call void asm sideeffect "add x0, x0, ${0:L}", "S,~{x0}"(i32* @var_tlsgd) @@ -23,31 +22,28 @@ define void @test_inline_modifier_L() nounwind { ; CHECK: ldr x0, [x0, #:gottprel_lo12:var_tlsie] ; CHECK: add x0, x0, #:tprel_lo12:var_tlsle -; CHECK-ELF: R_AARCH64_ADD_ABS_LO12_NC var_simple -; CHECK-ELF: R_AARCH64_LD64_GOT_LO12_NC var_got -; CHECK-ELF: R_AARCH64_TLSDESC_ADD_LO12_NC var_tlsgd -; CHECK-ELF: R_AARCH64_TLSLD_ADD_DTPREL_LO12 var_tlsld -; CHECK-ELF: R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC var_tlsie -; CHECK-ELF: R_AARCH64_TLSLE_ADD_TPREL_LO12 var_tlsle + call void asm sideeffect "add x0, x0, ${0:L}", "Si,~{x0}"(i32 64) + call void asm sideeffect "ldr x0, [x0, ${0:L}]", "Si,~{x0}"(i32 64) +; CHECK: add x0, x0, #64 +; CHECK: ldr x0, [x0, #64] ret void } define void @test_inline_modifier_G() nounwind { -; CHECK: test_inline_modifier_G: +; CHECK-LABEL: test_inline_modifier_G: call void asm sideeffect "add x0, x0, ${0:G}, lsl #12", "S,~{x0}"(i32* @var_tlsld) call void asm sideeffect "add x0, x0, ${0:G}, lsl #12", "S,~{x0}"(i32* @var_tlsle) ; CHECK: add x0, x0, #:dtprel_hi12:var_tlsld, lsl #12 ; CHECK: add x0, x0, #:tprel_hi12:var_tlsle, lsl #12 -; CHECK-ELF: R_AARCH64_TLSLD_ADD_DTPREL_HI12 var_tlsld -; CHECK-ELF: R_AARCH64_TLSLE_ADD_TPREL_HI12 var_tlsle - + call void asm sideeffect "add x0, x0, ${0:G}", "Si,~{x0}"(i32 42) +; CHECK: add x0, x0, #42 ret void } define void @test_inline_modifier_A() nounwind { -; CHECK: test_inline_modifier_A: +; CHECK-LABEL: test_inline_modifier_A: call void asm sideeffect "adrp x0, ${0:A}", "S,~{x0}"(i32* @var_simple) call void asm sideeffect "adrp x0, ${0:A}", "S,~{x0}"(i32* @var_got) call void asm sideeffect "adrp x0, ${0:A}", "S,~{x0}"(i32* @var_tlsgd) @@ -58,16 +54,14 @@ define void @test_inline_modifier_A() nounwind { ; CHECK: adrp x0, :tlsdesc:var_tlsgd ; CHECK: adrp x0, :gottprel:var_tlsie -; CHECK-ELF: R_AARCH64_ADR_PREL_PG_HI21 var_simple -; CHECK-ELF: R_AARCH64_ADR_GOT_PAGE var_got -; CHECK-ELF: R_AARCH64_TLSDESC_ADR_PAGE var_tlsgd -; CHECK-ELF: R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 var_tlsie + call void asm sideeffect "adrp x0, ${0:A}", "Si,~{x0}"(i32 40) +; CHECK: adrp x0, #40 ret void } define void @test_inline_modifier_wx(i32 %small, i64 %big) nounwind { -; CHECK: test_inline_modifier_wx: +; CHECK-LABEL: test_inline_modifier_wx: call i32 asm sideeffect "add $0, $0, $0", "=r,0"(i32 %small) call i32 asm sideeffect "add ${0:w}, ${0:w}, ${0:w}", "=r,0"(i32 %small) call i32 asm sideeffect "add ${0:x}, ${0:x}, ${0:x}", "=r,0"(i32 %small) @@ -87,11 +81,17 @@ define void @test_inline_modifier_wx(i32 %small, i64 %big) nounwind { call i32 asm sideeffect "add ${0:x}, ${1:x}, ${1:x}", "=r,r"(i32 0) ; CHECK: add {{w[0-9]+}}, wzr, wzr ; CHECK: add {{x[0-9]+}}, xzr, xzr + + call i32 asm sideeffect "add ${0:w}, ${0:w}, ${1:w}", "=r,Ir,0"(i32 123, i32 %small) + call i64 asm sideeffect "add ${0:x}, ${0:x}, ${1:x}", "=r,Ir,0"(i32 456, i64 %big) +; CHECK: add {{w[0-9]+}}, {{w[0-9]+}}, #123 +; CHECK: add {{x[0-9]+}}, {{x[0-9]+}}, #456 + ret void } define void @test_inline_modifier_bhsdq() nounwind { -; CHECK: test_inline_modifier_bhsdq: +; CHECK-LABEL: test_inline_modifier_bhsdq: call float asm sideeffect "ldr ${0:b}, [sp]", "=w"() call float asm sideeffect "ldr ${0:h}, [sp]", "=w"() call float asm sideeffect "ldr ${0:s}, [sp]", "=w"() @@ -113,13 +113,35 @@ define void @test_inline_modifier_bhsdq() nounwind { ; CHECK: ldr s0, [sp] ; CHECK: ldr d0, [sp] ; CHECK: ldr q0, [sp] + + call void asm sideeffect "fcmp b0, ${0:b}", "Yw"(float 0.0) + call void asm sideeffect "fcmp h0, ${0:h}", "Yw"(float 0.0) + call void asm sideeffect "fcmp s0, ${0:s}", "Yw"(float 0.0) + call void asm sideeffect "fcmp d0, ${0:d}", "Yw"(float 0.0) + call void asm sideeffect "fcmp q0, ${0:q}", "Yw"(float 0.0) +; CHECK: fcmp b0, #0 +; CHECK: fcmp h0, #0 +; CHECK: fcmp s0, #0 +; CHECK: fcmp d0, #0 +; CHECK: fcmp q0, #0 + ret void } define void @test_inline_modifier_c() nounwind { -; CHECK: test_inline_modifier_c: +; CHECK-LABEL: test_inline_modifier_c: call void asm sideeffect "adr x0, ${0:c}", "i"(i32 3) ; CHECK: adr x0, 3 ret void -}
\ No newline at end of file +} + +define void @test_inline_modifier_a() nounwind { +; CHECK-LABEL: test_inline_modifier_a: + call void asm sideeffect "prfm pldl1keep, ${0:a}", "r"(i32* @var_simple) +; CHECK: adrp [[VARHI:x[0-9]+]], var_simple +; CHECK: add x[[VARADDR:[0-9]+]], [[VARHI]], #:lo12:var_simple +; CHECK: prfm pldl1keep, [x[[VARADDR]]] + ret void +} + |