1 ; RUN: llc -o - %s -no-integrated-as | FileCheck %s 2 target triple = "x86_64--" 3 4 ; Allow to specify any of the 8/16/32/64 register names interchangeably in 5 ; constraints 6 7 ; Produced by C-programs like this: 8 ; void foo(int p) { register int reg __asm__("r8") = p; 9 ; __asm__ __volatile__("# REG: %0" : : "r" (reg)); } 10 11 ; CHECK-LABEL: reg64_as_32: 12 ; CHECK: # REG: %r8d 13 define void @reg64_as_32(i32 %p) { 14 call void asm sideeffect "# REG: $0", "{r8}"(i32 %p) 15 ret void 16 } 17 18 ; CHECK-LABEL: reg64_as_32_float: 19 ; CHECK: # REG: %r8d 20 define void @reg64_as_32_float(float %p) { 21 call void asm sideeffect "# REG: $0", "{r8}"(float %p) 22 ret void 23 } 24 25 ; CHECK-LABEL: reg64_as_16: 26 ; CHECK: # REG: %r9w 27 define void @reg64_as_16(i16 %p) { 28 call void asm sideeffect "# REG: $0", "{r9}"(i16 %p) 29 ret void 30 } 31 32 ; CHECK-LABEL: reg64_as_8: 33 ; CHECK: # REG: %bpl 34 define void @reg64_as_8(i8 %p) { 35 call void asm sideeffect "# REG: $0", "{rbp}"(i8 %p) 36 ret void 37 } 38 39 ; CHECK-LABEL: reg32_as_16: 40 ; CHECK: # REG: %r15w 41 define void @reg32_as_16(i16 %p) { 42 call void asm sideeffect "# REG: $0", "{r15d}"(i16 %p) 43 ret void 44 } 45 46 ; CHECK-LABEL: reg32_as_8: 47 ; CHECK: # REG: %r12b 48 define void @reg32_as_8(i8 %p) { 49 call void asm sideeffect "# REG: $0", "{r12d}"(i8 %p) 50 ret void 51 } 52 53 ; CHECK-LABEL: reg16_as_8: 54 ; CHECK: # REG: %cl 55 define void @reg16_as_8(i8 %p) { 56 call void asm sideeffect "# REG: $0", "{cx}"(i8 %p) 57 ret void 58 } 59 60 ; CHECK-LABEL: reg32_as_64: 61 ; CHECK: # REG: %rbp 62 define void @reg32_as_64(i64 %p) { 63 call void asm sideeffect "# REG: $0", "{ebp}"(i64 %p) 64 ret void 65 } 66 67 ; CHECK-LABEL: reg32_as_64_float: 68 ; CHECK: # REG: %rbp 69 define void @reg32_as_64_float(double %p) { 70 call void asm sideeffect "# REG: $0", "{ebp}"(double %p) 71 ret void 72 } 73 74 ; CHECK-LABEL: reg16_as_64: 75 ; CHECK: # REG: %r13 76 define void @reg16_as_64(i64 %p) { 77 call void asm sideeffect "# REG: $0", "{r13w}"(i64 %p) 78 ret void 79 } 80 81 ; CHECK-LABEL: reg16_as_64_float: 82 ; CHECK: # REG: %r13 83 define void @reg16_as_64_float(double %p) { 84 call void asm sideeffect "# REG: $0", "{r13w}"(double %p) 85 ret void 86 } 87 88 ; CHECK-LABEL: reg8_as_64: 89 ; CHECK: # REG: %rax 90 define void @reg8_as_64(i64 %p) { 91 call void asm sideeffect "# REG: $0", "{al}"(i64 %p) 92 ret void 93 } 94 95 ; CHECK-LABEL: reg8_as_64_float: 96 ; CHECK: # REG: %rax 97 define void @reg8_as_64_float(double %p) { 98 call void asm sideeffect "# REG: $0", "{al}"(double %p) 99 ret void 100 } 101 102 ; CHECK-LABEL: reg16_as_32: 103 ; CHECK: # REG: %r11d 104 define void @reg16_as_32(i32 %p) { 105 call void asm sideeffect "# REG: $0", "{r11w}"(i32 %p) 106 ret void 107 } 108 109 ; CHECK-LABEL: reg16_as_32_float: 110 ; CHECK: # REG: %r11d 111 define void @reg16_as_32_float(float %p) { 112 call void asm sideeffect "# REG: $0", "{r11w}"(float %p) 113 ret void 114 } 115 116 ; CHECK-LABEL: reg8_as_32: 117 ; CHECK: # REG: %r9d 118 define void @reg8_as_32(i32 %p) { 119 call void asm sideeffect "# REG: $0", "{r9b}"(i32 %p) 120 ret void 121 } 122 123 ; CHECK-LABEL: reg8_as_32_float: 124 ; CHECK: # REG: %r9d 125 define void @reg8_as_32_float(float %p) { 126 call void asm sideeffect "# REG: $0", "{r9b}"(float %p) 127 ret void 128 } 129 130 ; CHECK-LABEL: reg8_as_16: 131 ; CHECK: # REG: %di 132 define void @reg8_as_16(i16 %p) { 133 call void asm sideeffect "# REG: $0", "{dil}"(i16 %p) 134 ret void 135 } 136