Home | History | Annotate | Download | only in SystemZ
      1 # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z10 -start-before=greedy %s -o - \
      2 # RUN:   | FileCheck %s
      3 --- |
      4   define void @f0(double* %ptr1, float* %ptr2) {
      5     %val0 = load volatile float, float* %ptr2
      6     %val1 = load volatile float, float* %ptr2
      7     %val2 = load volatile float, float* %ptr2
      8     %val3 = load volatile float, float* %ptr2
      9     %val4 = load volatile float, float* %ptr2
     10     %val5 = load volatile float, float* %ptr2
     11     %val6 = load volatile float, float* %ptr2
     12     %val7 = load volatile float, float* %ptr2
     13     %val8 = load volatile float, float* %ptr2
     14     %val9 = load volatile float, float* %ptr2
     15     %val10 = load volatile float, float* %ptr2
     16     %val11 = load volatile float, float* %ptr2
     17     %val12 = load volatile float, float* %ptr2
     18     %val13 = load volatile float, float* %ptr2
     19     %val14 = load volatile float, float* %ptr2
     20     %val15 = load volatile float, float* %ptr2
     21     %val16 = load volatile float, float* %ptr2
     22     %ext0 = fpext float %val0 to double
     23     %ext1 = fpext float %val1 to double
     24     %ext2 = fpext float %val2 to double
     25     %ext3 = fpext float %val3 to double
     26     %ext4 = fpext float %val4 to double
     27     %ext5 = fpext float %val5 to double
     28     %ext6 = fpext float %val6 to double
     29     %ext7 = fpext float %val7 to double
     30     %ext8 = fpext float %val8 to double
     31     %ext9 = fpext float %val9 to double
     32     %ext10 = fpext float %val10 to double
     33     %ext11 = fpext float %val11 to double
     34     %ext12 = fpext float %val12 to double
     35     %ext13 = fpext float %val13 to double
     36     %ext14 = fpext float %val14 to double
     37     %ext15 = fpext float %val15 to double
     38     %ext16 = fpext float %val16 to double
     39     store volatile float %val0, float* %ptr2
     40     store volatile float %val1, float* %ptr2
     41     store volatile float %val2, float* %ptr2
     42     store volatile float %val3, float* %ptr2
     43     store volatile float %val4, float* %ptr2
     44     store volatile float %val5, float* %ptr2
     45     store volatile float %val6, float* %ptr2
     46     store volatile float %val7, float* %ptr2
     47     store volatile float %val8, float* %ptr2
     48     store volatile float %val9, float* %ptr2
     49     store volatile float %val10, float* %ptr2
     50     store volatile float %val11, float* %ptr2
     51     store volatile float %val12, float* %ptr2
     52     store volatile float %val13, float* %ptr2
     53     store volatile float %val14, float* %ptr2
     54     store volatile float %val15, float* %ptr2
     55     store volatile float %val16, float* %ptr2
     56     store volatile double %ext0, double* %ptr1
     57     store volatile double %ext1, double* %ptr1
     58     store volatile double %ext2, double* %ptr1
     59     store volatile double %ext3, double* %ptr1
     60     store volatile double %ext4, double* %ptr1
     61     store volatile double %ext5, double* %ptr1
     62     store volatile double %ext6, double* %ptr1
     63     store volatile double %ext7, double* %ptr1
     64     store volatile double %ext8, double* %ptr1
     65     store volatile double %ext9, double* %ptr1
     66     store volatile double %ext10, double* %ptr1
     67     store volatile double %ext11, double* %ptr1
     68     store volatile double %ext12, double* %ptr1
     69     store volatile double %ext13, double* %ptr1
     70     store volatile double %ext14, double* %ptr1
     71     store volatile double %ext15, double* %ptr1
     72     store volatile double %ext16, double* %ptr1
     73     ret void
     74   }
     75   
     76 ...
     77 
     78 # CHECK-LABEL: f0:
     79 # CHECK: ldeb {{%f[0-9]+}}, 16{{[04]}}(%r15)
     80 # CHECK: br %r14
     81 
     82 ---
     83 name:            f0
     84 alignment:       2
     85 tracksRegLiveness: true
     86 registers:       
     87   - { id: 0, class: addr64bit }
     88   - { id: 1, class: addr64bit }
     89   - { id: 2, class: fp32bit }
     90   - { id: 3, class: fp32bit }
     91   - { id: 4, class: fp32bit }
     92   - { id: 5, class: fp32bit }
     93   - { id: 6, class: fp32bit }
     94   - { id: 7, class: fp32bit }
     95   - { id: 8, class: fp32bit }
     96   - { id: 9, class: fp32bit }
     97   - { id: 10, class: fp32bit }
     98   - { id: 11, class: fp32bit }
     99   - { id: 12, class: fp32bit }
    100   - { id: 13, class: fp32bit }
    101   - { id: 14, class: fp32bit }
    102   - { id: 15, class: fp32bit }
    103   - { id: 16, class: fp32bit }
    104   - { id: 17, class: fp32bit }
    105   - { id: 18, class: fp32bit }
    106   - { id: 19, class: fp64bit }
    107   - { id: 20, class: fp64bit }
    108   - { id: 21, class: fp64bit }
    109   - { id: 22, class: fp64bit }
    110   - { id: 23, class: fp64bit }
    111   - { id: 24, class: fp64bit }
    112   - { id: 25, class: fp64bit }
    113   - { id: 26, class: fp64bit }
    114   - { id: 27, class: fp64bit }
    115   - { id: 28, class: fp64bit }
    116   - { id: 29, class: fp64bit }
    117   - { id: 30, class: fp64bit }
    118   - { id: 31, class: fp64bit }
    119   - { id: 32, class: fp64bit }
    120   - { id: 33, class: fp64bit }
    121   - { id: 34, class: fp64bit }
    122   - { id: 35, class: fp64bit }
    123 liveins:         
    124   - { reg: '$r2d', virtual-reg: '%0' }
    125   - { reg: '$r3d', virtual-reg: '%1' }
    126 body:             |
    127   bb.0 (%ir-block.0):
    128     liveins: $r2d, $r3d
    129   
    130     %1 = COPY $r3d
    131     %0 = COPY $r2d
    132     %2 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    133     %3 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    134     %4 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    135     %5 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    136     %6 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    137     %7 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    138     %8 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    139     %9 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    140     %10 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    141     %11 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    142     %12 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    143     %13 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    144     %14 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    145     %15 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    146     %16 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    147     %17 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    148     %18 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
    149     STE %2, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    150     STE %3, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    151     STE %4, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    152     STE %5, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    153     STE %6, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    154     STE %7, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    155     STE %8, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    156     STE %9, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    157     STE %10, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    158     STE %11, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    159     STE %12, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    160     STE %13, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    161     STE %14, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    162     STE %15, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    163     STE %16, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    164     STE %17, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    165     STE %18, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
    166     %19 = LDEBR %2
    167     STD %19, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    168     %20 = LDEBR %3
    169     STD %20, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    170     %21 = LDEBR %4
    171     STD %21, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    172     %22 = LDEBR %5
    173     STD %22, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    174     %23 = LDEBR %6
    175     STD %23, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    176     %24 = LDEBR %7
    177     STD %24, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    178     %25 = LDEBR %8
    179     STD %25, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    180     %26 = LDEBR %9
    181     STD %26, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    182     %27 = LDEBR %10
    183     STD %27, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    184     %28 = LDEBR %11
    185     STD %28, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    186     %29 = LDEBR %12
    187     STD %29, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    188     %30 = LDEBR %13
    189     STD %30, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    190     %31 = LDEBR %14
    191     STD %31, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    192     %32 = LDEBR %15
    193     STD %32, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    194     %33 = LDEBR %16
    195     STD %33, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    196     %34 = LDEBR %17
    197     STD %34, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    198     %35 = LDEBR %18
    199     STD %35, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
    200     Return
    201 
    202 ...
    203