1 // RUN: %llvmgcc %s -S -o - | FileCheck %s 2 // Exercise various use cases for local asm "register variables". 3 // XFAIL: * 4 // XTARGET: x86_64,i686,i386 5 6 int foo() { 7 // CHECK: %a = alloca i32 8 9 register int a asm("rsi")=5; 10 // CHECK: store i32 5, i32* %a, align 4 11 12 asm volatile("; %0 This asm defines rsi" : "=r"(a)); 13 // CHECK: %1 = call i32 asm sideeffect "; $0 This asm defines rsi", "={rsi} 14 // CHECK: store i32 %1, i32* %a 15 16 a = 42; 17 // CHECK: store i32 42, i32* %a, align 4 18 19 asm volatile("; %0 This asm uses rsi" : : "r"(a)); 20 // CHECK: %2 = load i32* %a, align 4 21 // CHECK: call void asm sideeffect "", "{rsi}"(i32 %2) nounwind 22 // CHECK: %3 = call i32 asm sideeffect "", "={rsi}"() nounwind 23 // CHECK: call void asm sideeffect "; $0 This asm uses rsi", "{rsi},~{dirflag},~{fpsr},~{flags}"(i32 %3) 24 25 return a; 26 // CHECK: %4 = load i32* %a, align 4 27 // CHECK: call void asm sideeffect "", "{rsi}"(i32 %4) nounwind 28 // CHECK: %5 = call i32 asm sideeffect "", "={rsi}"() nounwind 29 // CHECK: store i32 %5, i32* %0, align 4 30 // CHECK: %6 = load i32* %0, align 4 31 // CHECK: store i32 %6, i32* %retval, align 4 32 } 33