1 # RUN: llc -march=x86-64 -start-after block-placement -stop-after block-placement -o /dev/null %s | FileCheck %s 2 3 --- | 4 define i64 @test(i64 %x, i64 %y) #0 { 5 entry: 6 %x0 = call { i64, i64 } asm "foo", "=r,=r,1,0,~{dirflag},~{fpsr},~{flags}"(i64 %x, i64 %y) #0 7 %x1 = extractvalue { i64, i64 } %x0, 0 8 ret i64 %x1 9 } 10 11 define i64 @test2(i64 %x, i64 %y) #0 { 12 entry: 13 %x0 = call { i64, i64 } asm "foo", "=r,=r,1,0,~{dirflag},~{fpsr},~{flags}"(i64 %x, i64 %y) #0 14 %x1 = extractvalue { i64, i64 } %x0, 0 15 ret i64 %x1 16 } 17 18 attributes #0 = { nounwind } 19 ... 20 --- 21 name: test 22 hasInlineAsm: true 23 tracksRegLiveness: true 24 liveins: 25 - { reg: '%rdi' } 26 - { reg: '%rsi' } 27 body: | 28 bb.0.entry: 29 liveins: %rdi, %rsi 30 31 ; CHECK-LABEL: name: test 32 ; CHECK: INLINEASM $foo, 0, 2818058, def %rsi, 2818058, def dead %rdi, 33 INLINEASM $foo, 0, 2818058, def %rsi, 2818058, def dead %rdi, 2147549193, killed %rdi, 2147483657, killed %rsi, 12, implicit-def dead early-clobber %eflags 34 %rax = MOV64rr killed %rsi 35 RETQ killed %rax 36 ... 37 --- 38 name: test2 39 hasInlineAsm: true 40 tracksRegLiveness: true 41 liveins: 42 - { reg: '%rdi' } 43 - { reg: '%rsi' } 44 body: | 45 bb.0.entry: 46 liveins: %rdi, %rsi 47 48 ; Verify that the register ties are preserved. 49 ; CHECK-LABEL: name: test2 50 ; CHECK: INLINEASM $foo, 0, 2818058, def %rsi, 2818058, def dead %rdi, 2147549193, killed %rdi(tied-def 5), 2147483657, killed %rsi(tied-def 3), 12, implicit-def dead early-clobber %eflags 51 INLINEASM $foo, 0, 2818058, def %rsi, 2818058, def dead %rdi, 2147549193, killed %rdi(tied-def 5), 2147483657, killed %rsi(tied-def 3), 12, implicit-def dead early-clobber %eflags 52 %rax = MOV64rr killed %rsi 53 RETQ killed %rax 54 ... 55