Home | History | Annotate | Download | only in X86
      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