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