brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 4e366ca Raw
49 lines · c
1// RUN: %clang_cc1 %s -triple x86_64-apple-darwin -emit-llvm -o - | FileCheck %s2// Exercise various use cases for local asm "register variables".3 4int foo(void) {5// CHECK-LABEL: define{{.*}} i32 @foo()6// CHECK: [[A:%[a-zA-Z0-9]+]] = alloca i327 8  register int a asm("rsi")=5;9// CHECK: store i32 5, ptr [[A]]10 11  asm volatile("; %0 This asm defines rsi" : "=r"(a));12// CHECK: [[Z:%[a-zA-Z0-9]+]] = call i32 asm sideeffect "; $0 This asm defines rsi", "={rsi},~{dirflag},~{fpsr},~{flags}"()13// CHECK: store i32 [[Z]], ptr [[A]]14 15  a = 42;16// CHECK:  store i32 42, ptr [[A]]17 18  asm volatile("; %0 This asm uses rsi" : : "r"(a));19// CHECK:  [[TMP:%[a-zA-Z0-9]+]] = load i32, ptr [[A]]20// CHECK:  call void asm sideeffect "; $0 This asm uses rsi", "{rsi},~{dirflag},~{fpsr},~{flags}"(i32 [[TMP]])21 22  return a;23// CHECK:  [[TMP1:%[a-zA-Z0-9]+]] = load i32, ptr [[A]]24// CHECK:  ret i32 [[TMP1]]25}26 27int earlyclobber(void) {28// CHECK-LABEL: define{{.*}} i32 @earlyclobber()29// CHECK: [[A:%[a-zA-Z0-9]+]] = alloca i3230 31  register int a asm("rsi")=5;32// CHECK: store i32 5, ptr [[A]]33 34  asm volatile("; %0 This asm defines rsi" : "=&r"(a));35// CHECK: [[Z:%[a-zA-Z0-9]+]] = call i32 asm sideeffect "; $0 This asm defines rsi", "=&{rsi},~{dirflag},~{fpsr},~{flags}"()36// CHECK: store i32 [[Z]], ptr [[A]]37 38  a = 42;39// CHECK:  store i32 42, ptr [[A]]40 41  asm volatile("; %0 This asm uses rsi" : : "r"(a));42// CHECK:  [[TMP:%[a-zA-Z0-9]+]] = load i32, ptr [[A]]43// CHECK:  call void asm sideeffect "; $0 This asm uses rsi", "{rsi},~{dirflag},~{fpsr},~{flags}"(i32 [[TMP]])44 45  return a;46// CHECK:  [[TMP1:%[a-zA-Z0-9]+]] = load i32, ptr [[A]]47// CHECK:  ret i32 [[TMP1]]48}49