xref: /llvm-project/llvm/test/CodeGen/X86/asm-modifier.ll (revision f8395f8420cee8fc0854f43c9e88819c0ed54696)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc -mtriple=i686 < %s | FileCheck %s --check-prefixes=CHECK,X86
3; RUN: llc -mtriple=x86_64 < %s | FileCheck %s --check-prefixes=CHECK,X64
4
5@var = internal global i32 0, align 4
6
7define dso_local void @test_c() nounwind {
8; CHECK-LABEL: test_c:
9; CHECK:       # %bb.0:
10; CHECK-NEXT:    #APP
11; CHECK-NEXT:    #TEST 42
12; CHECK-NEXT:    #NO_APP
13; CHECK-NEXT:    #APP
14; CHECK-NEXT:    #TEST var
15; CHECK-NEXT:    #NO_APP
16; CHECK-NEXT:    ret{{[l|q]}}
17  tail call void asm sideeffect "#TEST ${0:c}", "i"(i32 42)
18  tail call void asm sideeffect "#TEST ${0:c}", "i"(ptr nonnull @var)
19  ret void
20}
21
22define dso_local void @test_n() nounwind {
23; CHECK-LABEL: test_n:
24; CHECK:       # %bb.0:
25; CHECK-NEXT:    #APP
26; CHECK-NEXT:    #TEST 37
27; CHECK-NEXT:    #NO_APP
28; CHECK-NEXT:    ret{{[l|q]}}
29  tail call void asm sideeffect "#TEST ${0:n}", "i"(i32 -37)
30  ret void
31}
32
33define void @test_q() {
34; CHECK-LABEL: test_q:
35; CHECK:       # %bb.0: # %entry
36; CHECK-NEXT:    #APP
37; CHECK-NEXT:    #TEST 0
38; CHECK-NEXT:    #NO_APP
39; CHECK-NEXT:    ret{{[l|q]}}
40entry:
41  call void asm sideeffect "#TEST ${0:q}", "=*imr"( ptr elementtype( i64) null )
42  ret void
43}
44
45define void @test_V(ptr %p) {
46; X86-LABEL: test_V:
47; X86:       # %bb.0: # %entry
48; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
49; X86-NEXT:    #APP
50; X86-NEXT:    calll __x86_indirect_thunk_eax
51; X86-NEXT:    #NO_APP
52; X86-NEXT:    retl
53;
54; X64-LABEL: test_V:
55; X64:       # %bb.0: # %entry
56; X64-NEXT:    #APP
57; X64-NEXT:    callq __x86_indirect_thunk_rdi
58; X64-NEXT:    #NO_APP
59; X64-NEXT:    retq
60entry:
61  tail call void asm sideeffect "call __x86_indirect_thunk_${0:V}", "r,~{dirflag},~{fpsr},~{flags}"(ptr %p)
62  ret void
63}
64
65