| ; RUN: llc -o - %s -no-integrated-as | FileCheck %s |
| target triple = "x86_64--" |
| |
| ; Allow to specify any of the 8/16/32/64 register names interchangeably in |
| ; constraints |
| |
| ; Produced by C-programs like this: |
| ; void foo(int p) { register int reg __asm__("r8") = p; |
| ; __asm__ __volatile__("# REG: %0" : : "r" (reg)); } |
| |
| ; CHECK-LABEL: reg64_as_32: |
| ; CHECK: # REG: %r8d |
| define void @reg64_as_32(i32 %p) { |
| call void asm sideeffect "# REG: $0", "{r8}"(i32 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg64_as_32_float: |
| ; CHECK: # REG: %r8d |
| define void @reg64_as_32_float(float %p) { |
| call void asm sideeffect "# REG: $0", "{r8}"(float %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg64_as_16: |
| ; CHECK: # REG: %r9w |
| define void @reg64_as_16(i16 %p) { |
| call void asm sideeffect "# REG: $0", "{r9}"(i16 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg64_as_8: |
| ; CHECK: # REG: %bpl |
| define void @reg64_as_8(i8 %p) { |
| call void asm sideeffect "# REG: $0", "{rbp}"(i8 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg32_as_16: |
| ; CHECK: # REG: %r15w |
| define void @reg32_as_16(i16 %p) { |
| call void asm sideeffect "# REG: $0", "{r15d}"(i16 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg32_as_8: |
| ; CHECK: # REG: %r12b |
| define void @reg32_as_8(i8 %p) { |
| call void asm sideeffect "# REG: $0", "{r12d}"(i8 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg16_as_8: |
| ; CHECK: # REG: %cl |
| define void @reg16_as_8(i8 %p) { |
| call void asm sideeffect "# REG: $0", "{cx}"(i8 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg32_as_64: |
| ; CHECK: # REG: %rbp |
| define void @reg32_as_64(i64 %p) { |
| call void asm sideeffect "# REG: $0", "{ebp}"(i64 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg32_as_64_float: |
| ; CHECK: # REG: %rbp |
| define void @reg32_as_64_float(double %p) { |
| call void asm sideeffect "# REG: $0", "{ebp}"(double %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg16_as_64: |
| ; CHECK: # REG: %r13 |
| define void @reg16_as_64(i64 %p) { |
| call void asm sideeffect "# REG: $0", "{r13w}"(i64 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg16_as_64_float: |
| ; CHECK: # REG: %r13 |
| define void @reg16_as_64_float(double %p) { |
| call void asm sideeffect "# REG: $0", "{r13w}"(double %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg8_as_64: |
| ; CHECK: # REG: %rax |
| define void @reg8_as_64(i64 %p) { |
| call void asm sideeffect "# REG: $0", "{al}"(i64 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg8_as_64_float: |
| ; CHECK: # REG: %rax |
| define void @reg8_as_64_float(double %p) { |
| call void asm sideeffect "# REG: $0", "{al}"(double %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg16_as_32: |
| ; CHECK: # REG: %r11d |
| define void @reg16_as_32(i32 %p) { |
| call void asm sideeffect "# REG: $0", "{r11w}"(i32 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg16_as_32_float: |
| ; CHECK: # REG: %r11d |
| define void @reg16_as_32_float(float %p) { |
| call void asm sideeffect "# REG: $0", "{r11w}"(float %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg8_as_32: |
| ; CHECK: # REG: %r9d |
| define void @reg8_as_32(i32 %p) { |
| call void asm sideeffect "# REG: $0", "{r9b}"(i32 %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg8_as_32_float: |
| ; CHECK: # REG: %r9d |
| define void @reg8_as_32_float(float %p) { |
| call void asm sideeffect "# REG: $0", "{r9b}"(float %p) |
| ret void |
| } |
| |
| ; CHECK-LABEL: reg8_as_16: |
| ; CHECK: # REG: %di |
| define void @reg8_as_16(i16 %p) { |
| call void asm sideeffect "# REG: $0", "{dil}"(i16 %p) |
| ret void |
| } |