Home | History | Annotate | Download | only in PowerPC
      1 # RUN: llc -run-pass ppc-mi-peepholes -ppc-convert-rr-to-ri %s -o - | FileCheck %s
      2 # RUN: llc -start-after ppc-mi-peepholes -ppc-late-peephole %s -o - | FileCheck %s --check-prefix=CHECK-LATE
      3 
      4 --- |
      5   ; ModuleID = 'convert-rr-to-ri-instrs.ll'
      6   source_filename = "convert-rr-to-ri-instrs.c"
      7   target datalayout = "e-m:e-i64:64-n32:64"
      8   target triple = "powerpc64le-unknown-linux-gnu"
      9   
     10   ; Function Attrs: norecurse nounwind readnone
     11   define signext i32 @testADD4(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
     12   entry:
     13     %add = add nsw i32 %a, 33
     14     %add1 = add nsw i32 %add, %b
     15     ret i32 %add1
     16   }
     17   
     18   ; Function Attrs: norecurse nounwind readnone
     19   define i64 @testADD8(i64 %a, i64 %b) local_unnamed_addr #0 {
     20   entry:
     21     %add = add nsw i64 %a, 33
     22     %add1 = add nsw i64 %add, %b
     23     ret i64 %add1
     24   }
     25   
     26   ; Function Attrs: norecurse nounwind readnone
     27   define i128 @testADDC(i128 %a, i128 %b) local_unnamed_addr #0 {
     28   entry:
     29     %add = add nsw i128 %b, %a
     30     ret i128 %add
     31   }
     32   
     33   ; Function Attrs: norecurse nounwind readnone
     34   define i128 @testADDC8(i128 %a, i128 %b) local_unnamed_addr #0 {
     35   entry:
     36     %add = add nsw i128 %b, %a
     37     ret i128 %add
     38   }
     39   
     40   ; Function Attrs: norecurse nounwind readnone
     41   define i64 @testADDCo(i64 %a, i64 %b) local_unnamed_addr #0 {
     42   entry:
     43     %add = add nsw i64 %b, %a
     44     %cmp = icmp eq i64 %add, 0
     45     %neg = sext i1 %cmp to i64
     46     %retval.0 = xor i64 %add, %neg
     47     ret i64 %retval.0
     48   }
     49   
     50   ; Function Attrs: norecurse nounwind readnone
     51   define signext i32 @testADDI(i32 signext %a) local_unnamed_addr #0 {
     52   entry:
     53     %add = add nsw i32 %a, 44
     54     ret i32 %add
     55   }
     56   
     57   ; Function Attrs: norecurse nounwind readnone
     58   define signext i32 @testADDI8(i32 signext %a) local_unnamed_addr #0 {
     59   entry:
     60     %add = add nsw i32 %a, 44
     61     ret i32 %add
     62   }
     63   
     64   ; Function Attrs: norecurse nounwind readnone
     65   define signext i32 @testANDo(i64 %a, i64 %b) local_unnamed_addr #0 {
     66   entry:
     67     %and = and i64 %b, %a
     68     %tobool = icmp eq i64 %and, 0
     69     %cond = select i1 %tobool, i64 %b, i64 %a
     70     %conv = trunc i64 %cond to i32
     71     ret i32 %conv
     72   }
     73   
     74   ; Function Attrs: norecurse nounwind readnone
     75   define i64 @testAND8o(i64 %a, i64 %b) local_unnamed_addr #0 {
     76   entry:
     77     %and = and i64 %b, %a
     78     %tobool = icmp eq i64 %and, 0
     79     %cond = select i1 %tobool, i64 %b, i64 %a
     80     ret i64 %cond
     81   }
     82   
     83   ; Function Attrs: norecurse nounwind readnone
     84   define i64 @testCMPD(i64 %a, i64 %b) local_unnamed_addr #0 {
     85   entry:
     86     %cmp = icmp sgt i64 %a, %b
     87     %add = select i1 %cmp, i64 0, i64 %a
     88     %cond = add nsw i64 %add, %b
     89     ret i64 %cond
     90   }
     91   
     92   ; Function Attrs: norecurse nounwind readnone
     93   define i64 @testCMPDI(i64 %a, i64 %b) local_unnamed_addr #0 {
     94   entry:
     95     %cmp = icmp sgt i64 %a, 87
     96     %add = select i1 %cmp, i64 0, i64 %a
     97     %cond = add nsw i64 %add, %b
     98     ret i64 %cond
     99   }
    100   
    101   ; Function Attrs: norecurse nounwind readnone
    102   define i64 @testCMPDI_F(i64 %a, i64 %b) local_unnamed_addr #0 {
    103   entry:
    104     %cmp = icmp sgt i64 %a, 87
    105     %add = select i1 %cmp, i64 0, i64 %a
    106     %cond = add nsw i64 %add, %b
    107     ret i64 %cond
    108   }
    109   
    110   ; Function Attrs: norecurse nounwind readnone
    111   define i64 @testCMPLD(i64 %a, i64 %b) local_unnamed_addr #0 {
    112   entry:
    113     %cmp = icmp ugt i64 %a, %b
    114     %add = select i1 %cmp, i64 0, i64 %a
    115     %cond = add i64 %add, %b
    116     ret i64 %cond
    117   }
    118   
    119   ; Function Attrs: norecurse nounwind readnone
    120   define i64 @testCMPLDI(i64 %a, i64 %b) local_unnamed_addr #0 {
    121   entry:
    122     %cmp = icmp ugt i64 %a, 87
    123     %add = select i1 %cmp, i64 0, i64 %a
    124     %cond = add i64 %add, %b
    125     ret i64 %cond
    126   }
    127   
    128   ; Function Attrs: norecurse nounwind readnone
    129   define signext i32 @testCMPW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
    130   entry:
    131     %cmp = icmp sgt i32 %a, %b
    132     %add = select i1 %cmp, i32 0, i32 %a
    133     %cond = add nsw i32 %add, %b
    134     ret i32 %cond
    135   }
    136   
    137   ; Function Attrs: norecurse nounwind readnone
    138   define signext i32 @testCMPWI(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
    139   entry:
    140     %cmp = icmp sgt i32 %a, 87
    141     %add = select i1 %cmp, i32 0, i32 %a
    142     %cond = add nsw i32 %add, %b
    143     ret i32 %cond
    144   }
    145   
    146   ; Function Attrs: norecurse nounwind readnone
    147   define zeroext i32 @testCMPLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    148   entry:
    149     %cmp = icmp ugt i32 %a, %b
    150     %add = select i1 %cmp, i32 0, i32 %a
    151     %cond = add i32 %add, %b
    152     ret i32 %cond
    153   }
    154   
    155   ; Function Attrs: norecurse nounwind readnone
    156   define zeroext i32 @testCMPLWI(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    157   entry:
    158     %cmp = icmp ugt i32 %a, 87
    159     %add = select i1 %cmp, i32 0, i32 %a
    160     %cond = add i32 %add, %b
    161     ret i32 %cond
    162   }
    163   
    164   ; Function Attrs: norecurse nounwind readonly
    165   define zeroext i8 @testLBZUX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    166   entry:
    167     %add = add i32 %idx, 1
    168     %idxprom = zext i32 %add to i64
    169     %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
    170     %0 = load i8, i8* %arrayidx, align 1, !tbaa !3
    171     %conv = zext i8 %0 to i32
    172     %add1 = add i32 %idx, 2
    173     %idxprom2 = zext i32 %add1 to i64
    174     %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
    175     %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3
    176     %conv4 = zext i8 %1 to i32
    177     %add5 = add nuw nsw i32 %conv4, %conv
    178     %conv6 = trunc i32 %add5 to i8
    179     ret i8 %conv6
    180   }
    181   
    182   ; Function Attrs: norecurse nounwind readonly
    183   define zeroext i8 @testLBZX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    184   entry:
    185     %add = add i32 %idx, 1
    186     %idxprom = zext i32 %add to i64
    187     %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
    188     %0 = load i8, i8* %arrayidx, align 1, !tbaa !3
    189     %conv = zext i8 %0 to i32
    190     %add1 = add i32 %idx, 2
    191     %idxprom2 = zext i32 %add1 to i64
    192     %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
    193     %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3
    194     %conv4 = zext i8 %1 to i32
    195     %add5 = add nuw nsw i32 %conv4, %conv
    196     %conv6 = trunc i32 %add5 to i8
    197     ret i8 %conv6
    198   }
    199   
    200   ; Function Attrs: norecurse nounwind readonly
    201   define zeroext i16 @testLHZUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    202   entry:
    203     %add = add i32 %idx, 1
    204     %idxprom = zext i32 %add to i64
    205     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
    206     %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
    207     %conv = zext i16 %0 to i32
    208     %add1 = add i32 %idx, 2
    209     %idxprom2 = zext i32 %add1 to i64
    210     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
    211     %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
    212     %conv4 = zext i16 %1 to i32
    213     %add5 = add nuw nsw i32 %conv4, %conv
    214     %conv6 = trunc i32 %add5 to i16
    215     ret i16 %conv6
    216   }
    217   
    218   ; Function Attrs: norecurse nounwind readonly
    219   define zeroext i16 @testLHZX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    220   entry:
    221     %add = add i32 %idx, 1
    222     %idxprom = zext i32 %add to i64
    223     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
    224     %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
    225     %conv = zext i16 %0 to i32
    226     %add1 = add i32 %idx, 2
    227     %idxprom2 = zext i32 %add1 to i64
    228     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
    229     %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
    230     %conv4 = zext i16 %1 to i32
    231     %add5 = add nuw nsw i32 %conv4, %conv
    232     %conv6 = trunc i32 %add5 to i16
    233     ret i16 %conv6
    234   }
    235   
    236   ; Function Attrs: norecurse nounwind readonly
    237   define signext i16 @testLHAUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    238   entry:
    239     %add = add i32 %idx, 1
    240     %idxprom = zext i32 %add to i64
    241     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
    242     %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
    243     %conv9 = zext i16 %0 to i32
    244     %add1 = add i32 %idx, 2
    245     %idxprom2 = zext i32 %add1 to i64
    246     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
    247     %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
    248     %conv410 = zext i16 %1 to i32
    249     %add5 = add nuw nsw i32 %conv410, %conv9
    250     %conv6 = trunc i32 %add5 to i16
    251     ret i16 %conv6
    252   }
    253   
    254   ; Function Attrs: norecurse nounwind readonly
    255   define signext i16 @testLHAX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    256   entry:
    257     %add = add i32 %idx, 1
    258     %idxprom = zext i32 %add to i64
    259     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
    260     %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
    261     %conv9 = zext i16 %0 to i32
    262     %add1 = add i32 %idx, 2
    263     %idxprom2 = zext i32 %add1 to i64
    264     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
    265     %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
    266     %conv410 = zext i16 %1 to i32
    267     %add5 = add nuw nsw i32 %conv410, %conv9
    268     %conv6 = trunc i32 %add5 to i16
    269     ret i16 %conv6
    270   }
    271   
    272   ; Function Attrs: norecurse nounwind readonly
    273   define zeroext i32 @testLWZUX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    274   entry:
    275     %add = add i32 %idx, 1
    276     %idxprom = zext i32 %add to i64
    277     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
    278     %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
    279     %add1 = add i32 %idx, 2
    280     %idxprom2 = zext i32 %add1 to i64
    281     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
    282     %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
    283     %add4 = add i32 %1, %0
    284     ret i32 %add4
    285   }
    286   
    287   ; Function Attrs: norecurse nounwind readonly
    288   define zeroext i32 @testLWZX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    289   entry:
    290     %add = add i32 %idx, 1
    291     %idxprom = zext i32 %add to i64
    292     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
    293     %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
    294     %add1 = add i32 %idx, 2
    295     %idxprom2 = zext i32 %add1 to i64
    296     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
    297     %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
    298     %add4 = add i32 %1, %0
    299     ret i32 %add4
    300   }
    301   
    302   ; Function Attrs: norecurse nounwind readonly
    303   define i64 @testLWAX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    304   entry:
    305     %add = add i32 %idx, 1
    306     %idxprom = zext i32 %add to i64
    307     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
    308     %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
    309     %conv = sext i32 %0 to i64
    310     %add1 = add i32 %idx, 2
    311     %idxprom2 = zext i32 %add1 to i64
    312     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
    313     %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
    314     %conv4 = sext i32 %1 to i64
    315     %add5 = add nsw i64 %conv4, %conv
    316     ret i64 %add5
    317   }
    318   
    319   ; Function Attrs: norecurse nounwind readonly
    320   define i64 @testLDUX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    321   entry:
    322     %add = add i32 %idx, 1
    323     %idxprom = zext i32 %add to i64
    324     %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
    325     %0 = load i64, i64* %arrayidx, align 8, !tbaa !10
    326     %add1 = add i32 %idx, 2
    327     %idxprom2 = zext i32 %add1 to i64
    328     %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
    329     %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10
    330     %add4 = add i64 %1, %0
    331     ret i64 %add4
    332   }
    333   
    334   ; Function Attrs: norecurse nounwind readonly
    335   define i64 @testLDX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    336   entry:
    337     %add = add i32 %idx, 1
    338     %idxprom = zext i32 %add to i64
    339     %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
    340     %0 = load i64, i64* %arrayidx, align 8, !tbaa !10
    341     %add1 = add i32 %idx, 2
    342     %idxprom2 = zext i32 %add1 to i64
    343     %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
    344     %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10
    345     %add4 = add i64 %1, %0
    346     ret i64 %add4
    347   }
    348   
    349   ; Function Attrs: norecurse nounwind readonly
    350   define double @testLFDUX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
    351   entry:
    352     %add = add i32 %idx, 1
    353     %idxprom = zext i32 %add to i64
    354     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
    355     %0 = load double, double* %arrayidx, align 8, !tbaa !12
    356     %add1 = add i32 %idx, 2
    357     %idxprom2 = zext i32 %add1 to i64
    358     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
    359     %1 = load double, double* %arrayidx3, align 8, !tbaa !12
    360     %add4 = fadd double %0, %1
    361     ret double %add4
    362   }
    363   
    364   ; Function Attrs: norecurse nounwind readonly
    365   define double @testLFDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
    366   entry:
    367     %add = add i32 %idx, 1
    368     %idxprom = zext i32 %add to i64
    369     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
    370     %0 = load double, double* %arrayidx, align 8, !tbaa !12
    371     %add1 = add i32 %idx, 2
    372     %idxprom2 = zext i32 %add1 to i64
    373     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
    374     %1 = load double, double* %arrayidx3, align 8, !tbaa !12
    375     %add4 = fadd double %0, %1
    376     ret double %add4
    377   }
    378   
    379   ; Function Attrs: norecurse nounwind readonly
    380   define <4 x float> @testLFSUX(float* nocapture readonly %ptr, i32 signext %idx) local_unnamed_addr #2 {
    381   entry:
    382     %idxprom = sext i32 %idx to i64
    383     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
    384     %0 = load float, float* %arrayidx, align 4, !tbaa !14
    385     %conv = fptoui float %0 to i32
    386     %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
    387     %1 = bitcast float* %ptr to i8*
    388     %2 = shl i64 %idxprom, 2
    389     %uglygep = getelementptr i8, i8* %1, i64 %2
    390     %uglygep2 = getelementptr i8, i8* %uglygep, i64 4
    391     %3 = bitcast i8* %uglygep2 to float*
    392     %4 = load float, float* %3, align 4, !tbaa !14
    393     %conv3 = fptoui float %4 to i32
    394     %vecinit4 = insertelement <4 x i32> %vecinit, i32 %conv3, i32 1
    395     %uglygep5 = getelementptr i8, i8* %uglygep, i64 8
    396     %5 = bitcast i8* %uglygep5 to float*
    397     %6 = load float, float* %5, align 4, !tbaa !14
    398     %conv8 = fptoui float %6 to i32
    399     %vecinit9 = insertelement <4 x i32> %vecinit4, i32 %conv8, i32 2
    400     %uglygep8 = getelementptr i8, i8* %uglygep, i64 12
    401     %7 = bitcast i8* %uglygep8 to float*
    402     %8 = load float, float* %7, align 4, !tbaa !14
    403     %conv13 = fptoui float %8 to i32
    404     %vecinit14 = insertelement <4 x i32> %vecinit9, i32 %conv13, i32 3
    405     %9 = bitcast <4 x i32> %vecinit14 to <4 x float>
    406     ret <4 x float> %9
    407   }
    408   
    409   ; Function Attrs: norecurse nounwind readonly
    410   define float @testLFSX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
    411   entry:
    412     %add = add i32 %idx, 1
    413     %idxprom = zext i32 %add to i64
    414     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
    415     %0 = load float, float* %arrayidx, align 4, !tbaa !14
    416     %add1 = add i32 %idx, 2
    417     %idxprom2 = zext i32 %add1 to i64
    418     %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
    419     %1 = load float, float* %arrayidx3, align 4, !tbaa !14
    420     %add4 = fadd float %0, %1
    421     ret float %add4
    422   }
    423   
    424   ; Function Attrs: norecurse nounwind readonly
    425   define double @testLXSDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    426   entry:
    427     %add = add i32 %idx, 1
    428     %idxprom = zext i32 %add to i64
    429     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
    430     %0 = load double, double* %arrayidx, align 8, !tbaa !12
    431     %add1 = add i32 %idx, 2
    432     %idxprom2 = zext i32 %add1 to i64
    433     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
    434     %1 = load double, double* %arrayidx3, align 8, !tbaa !12
    435     %add4 = fadd double %0, %1
    436     ret double %add4
    437   }
    438   
    439   ; Function Attrs: norecurse nounwind readonly
    440   define float @testLXSSPX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    441   entry:
    442     %add = add i32 %idx, 1
    443     %idxprom = zext i32 %add to i64
    444     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
    445     %0 = load float, float* %arrayidx, align 4, !tbaa !14
    446     %add1 = add i32 %idx, 2
    447     %idxprom2 = zext i32 %add1 to i64
    448     %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
    449     %1 = load float, float* %arrayidx3, align 4, !tbaa !14
    450     %add4 = fadd float %0, %1
    451     ret float %add4
    452   }
    453   
    454   ; Function Attrs: norecurse nounwind readonly
    455   define <4 x i32> @testLXVX(<4 x i32>* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
    456   entry:
    457     %add = add i32 %idx, 1
    458     %idxprom = zext i32 %add to i64
    459     %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
    460     %0 = load <4 x i32>, <4 x i32>* %arrayidx, align 16, !tbaa !3
    461     %add1 = add i32 %idx, 2
    462     %idxprom2 = zext i32 %add1 to i64
    463     %arrayidx3 = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom2
    464     %1 = load <4 x i32>, <4 x i32>* %arrayidx3, align 16, !tbaa !3
    465     %add4 = add <4 x i32> %1, %0
    466     ret <4 x i32> %add4
    467   }
    468   
    469   ; Function Attrs: norecurse nounwind readnone
    470   define signext i32 @testOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
    471   entry:
    472     %or = or i32 %b, %a
    473     ret i32 %or
    474   }
    475   
    476   ; Function Attrs: norecurse nounwind readnone
    477   define i64 @testOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
    478   entry:
    479     %or = or i64 %b, %a
    480     ret i64 %or
    481   }
    482   
    483   ; Function Attrs: norecurse nounwind readnone
    484   define signext i32 @testORI(i32 signext %a) local_unnamed_addr #0 {
    485   entry:
    486     %or = or i32 %a, 88
    487     ret i32 %or
    488   }
    489   
    490   ; Function Attrs: norecurse nounwind readnone
    491   define i64 @testORI8(i64 %a) local_unnamed_addr #0 {
    492   entry:
    493     %or = or i64 %a, 99
    494     ret i64 %or
    495   }
    496   
    497   ; Function Attrs: norecurse nounwind readnone
    498   define i64 @testRLDCL(i64 %a, i64 %b) local_unnamed_addr #0 {
    499   entry:
    500     %and = and i64 %b, 63
    501     %shl = shl i64 %a, %and
    502     %sub = sub nsw i64 64, %and
    503     %shr = lshr i64 %a, %sub
    504     %or = or i64 %shr, %shl
    505     ret i64 %or
    506   }
    507   
    508   ; Function Attrs: norecurse nounwind readnone
    509   define i64 @testRLDCLo(i64 %a, i64 %b) local_unnamed_addr #0 {
    510   entry:
    511     %and = and i64 %b, 63
    512     %shl = shl i64 %a, %and
    513     %sub = sub nsw i64 64, %and
    514     %shr = lshr i64 %a, %sub
    515     %or = or i64 %shr, %shl
    516     %tobool = icmp eq i64 %or, 0
    517     %cond = select i1 %tobool, i64 %and, i64 %a
    518     ret i64 %cond
    519   }
    520   
    521   ; Function Attrs: norecurse nounwind readnone
    522   define i64 @testRLDCR(i64 %a, i64 %b) local_unnamed_addr #0 {
    523   entry:
    524     %and = and i64 %b, 63
    525     %shl = shl i64 %a, %and
    526     %sub = sub nsw i64 64, %and
    527     %shr = lshr i64 %a, %sub
    528     %or = or i64 %shr, %shl
    529     ret i64 %or
    530   }
    531   
    532   ; Function Attrs: norecurse nounwind readnone
    533   define i64 @testRLDCRo(i64 %a, i64 %b) local_unnamed_addr #0 {
    534   entry:
    535     %and = and i64 %b, 63
    536     %shl = shl i64 %a, %and
    537     %sub = sub nsw i64 64, %and
    538     %shr = lshr i64 %a, %sub
    539     %or = or i64 %shr, %shl
    540     %tobool = icmp eq i64 %or, 0
    541     %cond = select i1 %tobool, i64 %and, i64 %a
    542     ret i64 %cond
    543   }
    544   
    545   ; Function Attrs: norecurse nounwind readnone
    546   define i64 @testRLDICL(i64 %a) local_unnamed_addr #0 {
    547   entry:
    548     %shr = lshr i64 %a, 11
    549     %and = and i64 %shr, 16777215
    550     ret i64 %and
    551   }
    552   
    553   ; Function Attrs: norecurse nounwind readnone
    554   define i64 @testRLDICLo(i64 %a, i64 %b) local_unnamed_addr #0 {
    555   entry:
    556     %shr = lshr i64 %a, 11
    557     %and = and i64 %shr, 16777215
    558     %tobool = icmp eq i64 %and, 0
    559     %cond = select i1 %tobool, i64 %b, i64 %and
    560     ret i64 %cond
    561   }
    562   
    563   ; Function Attrs: norecurse nounwind readnone
    564   define i64 @testRLDICLo2(i64 %a, i64 %b) local_unnamed_addr #0 {
    565   entry:
    566     %shr = lshr i64 %a, 11
    567     %and = and i64 %shr, 16777215
    568     %tobool = icmp eq i64 %and, 0
    569     %cond = select i1 %tobool, i64 %b, i64 %and
    570     ret i64 %cond
    571   }
    572 
    573   ; Function Attrs: norecurse nounwind readnone
    574   define i64 @testRLDICLo3(i64 %a, i64 %b) local_unnamed_addr #0 {
    575   entry:
    576     %shr = lshr i64 %a, 11
    577     %and = and i64 %shr, 16777215
    578     %tobool = icmp eq i64 %and, 0
    579     %cond = select i1 %tobool, i64 %b, i64 %and
    580     ret i64 %cond
    581   }
    582   
    583   ; Function Attrs: norecurse nounwind readnone
    584   define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 {
    585   entry:
    586     %shl = shl i32 %a, 4
    587     %and = and i32 %shl, 4080
    588     ret i32 %and
    589   }
    590   
    591   ; Function Attrs: norecurse nounwind readnone
    592   define zeroext i32 @testRLWINMFullReg(i32 zeroext %a) local_unnamed_addr #0 {
    593   entry:
    594     %shl = shl i32 %a, 4
    595     %and = and i32 %shl, 4080
    596     ret i32 %and
    597   }
    598   
    599   ; Function Attrs: norecurse nounwind readnone
    600   define zeroext i32 @testRLWINMFullRegOutOfRange(i32 zeroext %a) local_unnamed_addr #0 {
    601   entry:
    602     %shl = shl i32 %a, 4
    603     %and = and i32 %shl, 4080
    604     ret i32 %and
    605   }
    606   
    607   ; Function Attrs: norecurse nounwind readnone
    608   define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 {
    609   entry:
    610     %shl = shl i64 %a, 4
    611     %and = and i64 %shl, 4080
    612     ret i64 %and
    613   }
    614   
    615   ; Function Attrs: norecurse nounwind readnone
    616   define zeroext i32 @testRLWINMo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    617   entry:
    618     %and = and i32 %a, 255
    619     %tobool = icmp eq i32 %and, 0
    620     %cond = select i1 %tobool, i32 %b, i32 %a
    621     ret i32 %cond
    622   }
    623   
    624   ; Function Attrs: norecurse nounwind readnone
    625   define zeroext i32 @testRLWINMo2(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    626   entry:
    627     %and = and i32 %a, 255
    628     %tobool = icmp eq i32 %and, 0
    629     %cond = select i1 %tobool, i32 %b, i32 %a
    630     ret i32 %cond
    631   }
    632 
    633   ; Function Attrs: norecurse nounwind readnone
    634   define i64 @testRLWINM8o(i64 %a, i64 %b) local_unnamed_addr #0 {
    635   entry:
    636     %a.tr = trunc i64 %a to i32
    637     %0 = shl i32 %a.tr, 4
    638     %conv = and i32 %0, 4080
    639     %tobool = icmp eq i32 %conv, 0
    640     %conv1 = zext i32 %conv to i64
    641     %cond = select i1 %tobool, i64 %b, i64 %conv1
    642     ret i64 %cond
    643   }
    644   
    645   ; Function Attrs: norecurse nounwind readnone
    646   define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
    647   entry:
    648     %shl = shl i64 %a, %b
    649     ret i64 %shl
    650   }
    651   
    652   ; Function Attrs: norecurse nounwind readnone
    653   define i64 @testSLDo(i64 %a, i64 %b) local_unnamed_addr #0 {
    654   entry:
    655     %shl = shl i64 %a, %b
    656     %tobool = icmp eq i64 %shl, 0
    657     %cond = select i1 %tobool, i64 %b, i64 %a
    658     ret i64 %cond
    659   }
    660   
    661   ; Function Attrs: norecurse nounwind readnone
    662   define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
    663   entry:
    664     %shr = lshr i64 %a, %b
    665     ret i64 %shr
    666   }
    667   
    668   ; Function Attrs: norecurse nounwind readnone
    669   define i64 @testSRDo(i64 %a, i64 %b) local_unnamed_addr #0 {
    670   entry:
    671     %shr = lshr i64 %a, %b
    672     %tobool = icmp eq i64 %shr, 0
    673     %cond = select i1 %tobool, i64 %b, i64 %a
    674     ret i64 %cond
    675   }
    676   
    677   ; Function Attrs: norecurse nounwind readnone
    678   define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    679   entry:
    680     %shl = shl i32 %a, %b
    681     ret i32 %shl
    682   }
    683   
    684   ; Function Attrs: norecurse nounwind readnone
    685   define zeroext i32 @testSLWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    686   entry:
    687     %shl = shl i32 %a, %b
    688     %tobool = icmp eq i32 %shl, 0
    689     %cond = select i1 %tobool, i32 %b, i32 %a
    690     ret i32 %cond
    691   }
    692   
    693   ; Function Attrs: norecurse nounwind readnone
    694   define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    695   entry:
    696     %shr = lshr i32 %a, %b
    697     ret i32 %shr
    698   }
    699   
    700   ; Function Attrs: norecurse nounwind readnone
    701   define zeroext i32 @testSRWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
    702   entry:
    703     %shr = lshr i32 %a, %b
    704     %tobool = icmp eq i32 %shr, 0
    705     %cond = select i1 %tobool, i32 %b, i32 %a
    706     ret i32 %cond
    707   }
    708   
    709   ; Function Attrs: norecurse nounwind readnone
    710   define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
    711   entry:
    712     %shr = ashr i32 %a, %b
    713     ret i32 %shr
    714   }
    715   
    716   ; Function Attrs: norecurse nounwind readnone
    717   define signext i32 @testSRAWo(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
    718   entry:
    719     %shr = ashr i32 %a, %b
    720     %tobool = icmp eq i32 %shr, 0
    721     %cond = select i1 %tobool, i32 %b, i32 %shr
    722     ret i32 %cond
    723   }
    724   
    725   ; Function Attrs: norecurse nounwind readnone
    726   define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
    727   entry:
    728     %shr = ashr i64 %a, %b
    729     ret i64 %shr
    730   }
    731   
    732   ; Function Attrs: norecurse nounwind readnone
    733   define i64 @testSRADo(i64 %a, i64 %b) local_unnamed_addr #0 {
    734   entry:
    735     %shr = ashr i64 %a, %b
    736     %tobool = icmp eq i64 %shr, 0
    737     %cond = select i1 %tobool, i64 %b, i64 %shr
    738     ret i64 %cond
    739   }
    740   
    741   ; Function Attrs: norecurse nounwind
    742   define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
    743   entry:
    744     %add = add i32 %idx, 1
    745     %idxprom = zext i32 %add to i64
    746     %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
    747     store i8 %a, i8* %arrayidx, align 1, !tbaa !3
    748     %add1 = add i32 %idx, 2
    749     %idxprom2 = zext i32 %add1 to i64
    750     %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
    751     store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
    752     ret void
    753   }
    754   
    755   ; Function Attrs: norecurse nounwind
    756   define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
    757   entry:
    758     %add = add i32 %idx, 1
    759     %idxprom = zext i32 %add to i64
    760     %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
    761     store i8 %a, i8* %arrayidx, align 1, !tbaa !3
    762     %add1 = add i32 %idx, 2
    763     %idxprom2 = zext i32 %add1 to i64
    764     %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
    765     store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
    766     ret void
    767   }
    768   
    769   ; Function Attrs: norecurse nounwind
    770   define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
    771   entry:
    772     %add = add i32 %idx, 1
    773     %idxprom = zext i32 %add to i64
    774     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
    775     store i16 %a, i16* %arrayidx, align 2, !tbaa !6
    776     %add1 = add i32 %idx, 2
    777     %idxprom2 = zext i32 %add1 to i64
    778     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
    779     store i16 %a, i16* %arrayidx3, align 2, !tbaa !6
    780     ret void
    781   }
    782   
    783   ; Function Attrs: norecurse nounwind
    784   define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
    785   entry:
    786     %add = add i32 %idx, 1
    787     %idxprom = zext i32 %add to i64
    788     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
    789     store i16 %a, i16* %arrayidx, align 1, !tbaa !3
    790     %add1 = add i32 %idx, 2
    791     %idxprom2 = zext i32 %add1 to i64
    792     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
    793     store i16 %a, i16* %arrayidx3, align 1, !tbaa !3
    794     ret void
    795   }
    796   
    797   ; Function Attrs: norecurse nounwind
    798   define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
    799   entry:
    800     %add = add i32 %idx, 1
    801     %idxprom = zext i32 %add to i64
    802     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
    803     store i32 %a, i32* %arrayidx, align 4, !tbaa !8
    804     %add1 = add i32 %idx, 2
    805     %idxprom2 = zext i32 %add1 to i64
    806     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
    807     store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
    808     ret void
    809   }
    810   
    811   ; Function Attrs: norecurse nounwind
    812   define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
    813   entry:
    814     %add = add i32 %idx, 1
    815     %idxprom = zext i32 %add to i64
    816     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
    817     store i32 %a, i32* %arrayidx, align 4, !tbaa !8
    818     %add1 = add i32 %idx, 2
    819     %idxprom2 = zext i32 %add1 to i64
    820     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
    821     store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
    822     ret void
    823   }
    824   
    825   ; Function Attrs: norecurse nounwind
    826   define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
    827   entry:
    828     %add = add i32 %idx, 1
    829     %idxprom = zext i32 %add to i64
    830     %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
    831     store i64 %a, i64* %arrayidx, align 8, !tbaa !10
    832     %add1 = add i32 %idx, 2
    833     %idxprom2 = zext i32 %add1 to i64
    834     %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
    835     store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
    836     ret void
    837   }
    838   
    839   ; Function Attrs: norecurse nounwind
    840   define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
    841   entry:
    842     %add = add i32 %idx, 1
    843     %idxprom = zext i32 %add to i64
    844     %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
    845     store i64 %a, i64* %arrayidx, align 8, !tbaa !10
    846     %add1 = add i32 %idx, 2
    847     %idxprom2 = zext i32 %add1 to i64
    848     %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
    849     store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
    850     ret void
    851   }
    852   
    853   ; Function Attrs: norecurse nounwind readonly
    854   define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
    855   entry:
    856     %add = add i32 %idx, 1
    857     %idxprom = zext i32 %add to i64
    858     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
    859     store float %a, float* %arrayidx, align 4, !tbaa !14
    860     %add1 = add i32 %idx, 2
    861     %idxprom2 = zext i32 %add1 to i64
    862     %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
    863     store float %a, float* %arrayidx3, align 4, !tbaa !14
    864     ret void
    865   }
    866   
    867   ; Function Attrs: norecurse nounwind readonly
    868   define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
    869   entry:
    870     %add = add i32 %idx, 1
    871     %idxprom = zext i32 %add to i64
    872     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
    873     store float %a, float* %arrayidx, align 4, !tbaa !14
    874     %add1 = add i32 %idx, 2
    875     %idxprom2 = zext i32 %add1 to i64
    876     %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
    877     store float %a, float* %arrayidx3, align 4, !tbaa !14
    878     ret void
    879   }
    880   
    881   ; Function Attrs: norecurse nounwind readonly
    882   define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
    883   entry:
    884     %add = add i32 %idx, 1
    885     %idxprom = zext i32 %add to i64
    886     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
    887     store double %a, double* %arrayidx, align 8, !tbaa !12
    888     %add1 = add i32 %idx, 2
    889     %idxprom2 = zext i32 %add1 to i64
    890     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
    891     store double %a, double* %arrayidx3, align 8, !tbaa !12
    892     ret void
    893   }
    894   
    895   ; Function Attrs: norecurse nounwind readonly
    896   define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
    897   entry:
    898     %add = add i32 %idx, 1
    899     %idxprom = zext i32 %add to i64
    900     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
    901     store double %a, double* %arrayidx, align 8, !tbaa !12
    902     %add1 = add i32 %idx, 2
    903     %idxprom2 = zext i32 %add1 to i64
    904     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
    905     store double %a, double* %arrayidx3, align 8, !tbaa !12
    906     ret void
    907   }
    908   
    909   ; Function Attrs: norecurse nounwind
    910   define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 {
    911   entry:
    912     %idxprom = zext i32 %idx to i64
    913     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
    914     store float %a, float* %arrayidx, align 4, !tbaa !14
    915     ret void
    916   }
    917   
    918   ; Function Attrs: norecurse nounwind
    919   define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 {
    920   entry:
    921     %idxprom = zext i32 %idx to i64
    922     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
    923     store double %a, double* %arrayidx, align 8, !tbaa !12
    924     ret void
    925   }
    926   
    927   ; Function Attrs: norecurse nounwind
    928   define void @testSTXVX(<4 x i32>* nocapture %ptr, <4 x i32> %a, i32 zeroext %idx) local_unnamed_addr #3 {
    929   entry:
    930     %idxprom = zext i32 %idx to i64
    931     %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
    932     store <4 x i32> %a, <4 x i32>* %arrayidx, align 16, !tbaa !3
    933     ret void
    934   }
    935   
    936   ; Function Attrs: norecurse nounwind readnone
    937   define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 {
    938   entry:
    939     %sub = sub nsw i128 %a, %b
    940     ret i128 %sub
    941   }
    942   
    943   ; Function Attrs: norecurse nounwind readnone
    944   define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 {
    945   entry:
    946     %sub = sub nsw i128 %a, %b
    947     ret i128 %sub
    948   }
    949   
    950   ; Function Attrs: norecurse nounwind readnone
    951   define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
    952   entry:
    953     %xor = xor i32 %b, %a
    954     ret i32 %xor
    955   }
    956   
    957   ; Function Attrs: norecurse nounwind readnone
    958   define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
    959   entry:
    960     %xor = xor i64 %b, %a
    961     ret i64 %xor
    962   }
    963   
    964   ; Function Attrs: norecurse nounwind readnone
    965   define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 {
    966   entry:
    967     %xor = xor i32 %a, 17
    968     ret i32 %xor
    969   }
    970   
    971   ; Function Attrs: norecurse nounwind readnone
    972   define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 {
    973   entry:
    974     %xor = xor i64 %a, 17
    975     ret i64 %xor
    976   }
    977   
    978   attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
    979   attributes #1 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
    980   attributes #2 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,-vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
    981   attributes #3 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
    982   
    983   !llvm.module.flags = !{!0, !1}
    984   !llvm.ident = !{!2}
    985   
    986   !0 = !{i32 1, !"wchar_size", i32 4}
    987   !1 = !{i32 7, !"PIC Level", i32 2}
    988   !2 = !{!"clang version 6.0.0 (trunk 316067)"}
    989   !3 = !{!4, !4, i64 0}
    990   !4 = !{!"omnipotent char", !5, i64 0}
    991   !5 = !{!"Simple C/C++ TBAA"}
    992   !6 = !{!7, !7, i64 0}
    993   !7 = !{!"short", !4, i64 0}
    994   !8 = !{!9, !9, i64 0}
    995   !9 = !{!"int", !4, i64 0}
    996   !10 = !{!11, !11, i64 0}
    997   !11 = !{!"long long", !4, i64 0}
    998   !12 = !{!13, !13, i64 0}
    999   !13 = !{!"double", !4, i64 0}
   1000   !14 = !{!15, !15, i64 0}
   1001   !15 = !{!"float", !4, i64 0}
   1002 
   1003 ...
   1004 ---
   1005 name:            testADD4
   1006 # CHECK-ALL: name: testADD4
   1007 alignment:       4
   1008 exposesReturnsTwice: false
   1009 legalized:       false
   1010 regBankSelected: false
   1011 selected:        false
   1012 tracksRegLiveness: true
   1013 registers:       
   1014   - { id: 0, class: g8rc, preferred-register: '' }
   1015   - { id: 1, class: g8rc, preferred-register: '' }
   1016   - { id: 2, class: gprc, preferred-register: '' }
   1017   - { id: 3, class: gprc, preferred-register: '' }
   1018   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   1019   - { id: 5, class: gprc, preferred-register: '' }
   1020   - { id: 6, class: g8rc, preferred-register: '' }
   1021 liveins:         
   1022   - { reg: '$x3', virtual-reg: '%0' }
   1023   - { reg: '$x4', virtual-reg: '%1' }
   1024 frameInfo:       
   1025   isFrameAddressTaken: false
   1026   isReturnAddressTaken: false
   1027   hasStackMap:     false
   1028   hasPatchPoint:   false
   1029   stackSize:       0
   1030   offsetAdjustment: 0
   1031   maxAlignment:    0
   1032   adjustsStack:    false
   1033   hasCalls:        false
   1034   stackProtector:  ''
   1035   maxCallFrameSize: 4294967295
   1036   hasOpaqueSPAdjustment: false
   1037   hasVAStart:      false
   1038   hasMustTailInVarArgFunc: false
   1039   savePoint:       ''
   1040   restorePoint:    ''
   1041 fixedStack:      
   1042 stack:           
   1043 constants:       
   1044 body:             |
   1045   bb.0.entry:
   1046     liveins: $x3, $x4
   1047   
   1048     %1 = COPY $x4
   1049     %0 = COPY $x3
   1050     %2 = LI 33
   1051     %3 = COPY %0.sub_32
   1052     %4 = ADD4 killed %3, %2
   1053     %5 = ADD4 killed %2, killed %4
   1054     ; CHECK: ADDI killed %3, 33
   1055     ; CHECK: ADDI killed %4, 33
   1056     ; CHECK-LATE: addi 3, 3, 33
   1057     ; CHECK-LATE: addi 3, 3, 33
   1058     %6 = EXTSW_32_64 killed %5
   1059     $x3 = COPY %6
   1060     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1061 
   1062 ...
   1063 ---
   1064 name:            testADD8
   1065 # CHECK-ALL: name: testADD8
   1066 alignment:       4
   1067 exposesReturnsTwice: false
   1068 legalized:       false
   1069 regBankSelected: false
   1070 selected:        false
   1071 tracksRegLiveness: true
   1072 registers:       
   1073   - { id: 0, class: g8rc, preferred-register: '' }
   1074   - { id: 1, class: g8rc, preferred-register: '' }
   1075   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1076   - { id: 3, class: g8rc, preferred-register: '' }
   1077 liveins:         
   1078   - { reg: '$x3', virtual-reg: '%0' }
   1079   - { reg: '$x4', virtual-reg: '%1' }
   1080 frameInfo:       
   1081   isFrameAddressTaken: false
   1082   isReturnAddressTaken: false
   1083   hasStackMap:     false
   1084   hasPatchPoint:   false
   1085   stackSize:       0
   1086   offsetAdjustment: 0
   1087   maxAlignment:    0
   1088   adjustsStack:    false
   1089   hasCalls:        false
   1090   stackProtector:  ''
   1091   maxCallFrameSize: 4294967295
   1092   hasOpaqueSPAdjustment: false
   1093   hasVAStart:      false
   1094   hasMustTailInVarArgFunc: false
   1095   savePoint:       ''
   1096   restorePoint:    ''
   1097 fixedStack:      
   1098 stack:           
   1099 constants:       
   1100 body:             |
   1101   bb.0.entry:
   1102     liveins: $x3, $x4
   1103   
   1104     %1 = LI8 33
   1105     %0 = COPY $x3
   1106     %2 = ADD8 %0, %1
   1107     %3 = ADD8 killed %1, killed %2
   1108     ; CHECK: ADDI8 %0, 33
   1109     ; CHECK: ADDI8 killed %2, 33
   1110     ; CHECK-LATE: addi 3, 3, 33
   1111     ; CHECK-LATE: addi 3, 3, 33
   1112     $x3 = COPY %3
   1113     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1114 
   1115 ...
   1116 ---
   1117 name:            testADDC
   1118 # CHECK-ALL: name: testADDC
   1119 alignment:       4
   1120 exposesReturnsTwice: false
   1121 legalized:       false
   1122 regBankSelected: false
   1123 selected:        false
   1124 tracksRegLiveness: true
   1125 registers:       
   1126   - { id: 0, class: g8rc, preferred-register: '' }
   1127   - { id: 1, class: g8rc, preferred-register: '' }
   1128   - { id: 2, class: g8rc, preferred-register: '' }
   1129   - { id: 3, class: g8rc, preferred-register: '' }
   1130   - { id: 4, class: gprc, preferred-register: '' }
   1131   - { id: 5, class: gprc, preferred-register: '' }
   1132   - { id: 6, class: gprc, preferred-register: '' }
   1133   - { id: 7, class: g8rc, preferred-register: '' }
   1134   - { id: 8, class: g8rc, preferred-register: '' }
   1135 liveins:         
   1136   - { reg: '$x3', virtual-reg: '%0' }
   1137   - { reg: '$x4', virtual-reg: '%1' }
   1138   - { reg: '$x5', virtual-reg: '%2' }
   1139   - { reg: '$x6', virtual-reg: '%3' }
   1140 frameInfo:       
   1141   isFrameAddressTaken: false
   1142   isReturnAddressTaken: false
   1143   hasStackMap:     false
   1144   hasPatchPoint:   false
   1145   stackSize:       0
   1146   offsetAdjustment: 0
   1147   maxAlignment:    0
   1148   adjustsStack:    false
   1149   hasCalls:        false
   1150   stackProtector:  ''
   1151   maxCallFrameSize: 4294967295
   1152   hasOpaqueSPAdjustment: false
   1153   hasVAStart:      false
   1154   hasMustTailInVarArgFunc: false
   1155   savePoint:       ''
   1156   restorePoint:    ''
   1157 fixedStack:      
   1158 stack:           
   1159 constants:       
   1160 body:             |
   1161   bb.0.entry:
   1162     liveins: $x3, $x4, $x5, $x6
   1163   
   1164     %3 = COPY $x6
   1165     %2 = COPY $x5
   1166     %1 = COPY $x4
   1167     %0 = COPY $x3
   1168     %4 = COPY %0.sub_32
   1169     %5 = LI 55
   1170     %6 = ADDC %5, %4, implicit-def $carry
   1171     ; CHECK: ADDIC %4, 55, implicit-def $carry
   1172     ; CHECK-LATE: addic 3, 3, 55
   1173     %7 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry
   1174     %8 = EXTSW_32_64 %6
   1175     $x3 = COPY %8
   1176     $x4 = COPY %7
   1177     BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
   1178 
   1179 ...
   1180 ---
   1181 name:            testADDC8
   1182 # CHECK-ALL: name: testADDC8
   1183 alignment:       4
   1184 exposesReturnsTwice: false
   1185 legalized:       false
   1186 regBankSelected: false
   1187 selected:        false
   1188 tracksRegLiveness: true
   1189 registers:       
   1190   - { id: 0, class: g8rc, preferred-register: '' }
   1191   - { id: 1, class: g8rc, preferred-register: '' }
   1192   - { id: 2, class: g8rc, preferred-register: '' }
   1193   - { id: 3, class: g8rc, preferred-register: '' }
   1194   - { id: 4, class: g8rc, preferred-register: '' }
   1195   - { id: 5, class: g8rc, preferred-register: '' }
   1196 liveins:         
   1197   - { reg: '$x3', virtual-reg: '%0' }
   1198   - { reg: '$x4', virtual-reg: '%1' }
   1199   - { reg: '$x5', virtual-reg: '%2' }
   1200   - { reg: '$x6', virtual-reg: '%3' }
   1201 frameInfo:       
   1202   isFrameAddressTaken: false
   1203   isReturnAddressTaken: false
   1204   hasStackMap:     false
   1205   hasPatchPoint:   false
   1206   stackSize:       0
   1207   offsetAdjustment: 0
   1208   maxAlignment:    0
   1209   adjustsStack:    false
   1210   hasCalls:        false
   1211   stackProtector:  ''
   1212   maxCallFrameSize: 4294967295
   1213   hasOpaqueSPAdjustment: false
   1214   hasVAStart:      false
   1215   hasMustTailInVarArgFunc: false
   1216   savePoint:       ''
   1217   restorePoint:    ''
   1218 fixedStack:      
   1219 stack:           
   1220 constants:       
   1221 body:             |
   1222   bb.0.entry:
   1223     liveins: $x3, $x4, $x5, $x6
   1224   
   1225     %3 = COPY $x6
   1226     %2 = COPY $x5
   1227     %1 = COPY $x4
   1228     %0 = LI8 777
   1229     %4 = ADDC8 %2, %0, implicit-def $carry
   1230     ; CHECK: ADDIC8 %2, 777, implicit-def $carry
   1231     ; CHECK-LATE: addic 3, 5, 777
   1232     %5 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry
   1233     $x3 = COPY %4
   1234     $x4 = COPY %5
   1235     BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
   1236 
   1237 ...
   1238 ---
   1239 name:            testADDCo
   1240 # CHECK-ALL: name: testADDCo
   1241 alignment:       4
   1242 exposesReturnsTwice: false
   1243 legalized:       false
   1244 regBankSelected: false
   1245 selected:        false
   1246 tracksRegLiveness: true
   1247 registers:       
   1248   - { id: 0, class: g8rc, preferred-register: '' }
   1249   - { id: 1, class: gprc, preferred-register: '' }
   1250   - { id: 2, class: gprc, preferred-register: '' }
   1251   - { id: 3, class: gprc, preferred-register: '' }
   1252   - { id: 4, class: crrc, preferred-register: '' }
   1253   - { id: 5, class: crbitrc, preferred-register: '' }
   1254   - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1255   - { id: 7, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1256   - { id: 8, class: g8rc, preferred-register: '' }
   1257 liveins:         
   1258   - { reg: '$x3', virtual-reg: '%0' }
   1259   - { reg: '$x4', virtual-reg: '%1' }
   1260 frameInfo:       
   1261   isFrameAddressTaken: false
   1262   isReturnAddressTaken: false
   1263   hasStackMap:     false
   1264   hasPatchPoint:   false
   1265   stackSize:       0
   1266   offsetAdjustment: 0
   1267   maxAlignment:    0
   1268   adjustsStack:    false
   1269   hasCalls:        false
   1270   stackProtector:  ''
   1271   maxCallFrameSize: 4294967295
   1272   hasOpaqueSPAdjustment: false
   1273   hasVAStart:      false
   1274   hasMustTailInVarArgFunc: false
   1275   savePoint:       ''
   1276   restorePoint:    ''
   1277 fixedStack:      
   1278 stack:           
   1279 constants:       
   1280 body:             |
   1281   bb.0.entry:
   1282     liveins: $x3, $x4
   1283   
   1284     %1 = LI 433
   1285     %0 = COPY $x3
   1286     %2 = COPY %0.sub_32
   1287     %3 = ADDCo %1, %2, implicit-def $cr0, implicit-def $carry
   1288     ; CHECK: ADDICo %2, 433, implicit-def $cr0, implicit-def $carry
   1289     ; CHECK-LATE: addic. 3, 3, 433
   1290     %4 = COPY killed $cr0
   1291     %5 = COPY %4.sub_eq
   1292     %6 = LI8 0
   1293     %7 = LI8 -1
   1294     %8 = ISEL8 %7, %6, %5
   1295     $x3 = COPY %8
   1296     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1297 
   1298 ...
   1299 ---
   1300 name:            testADDI
   1301 # CHECK-ALL: name: testADDI
   1302 alignment:       4
   1303 exposesReturnsTwice: false
   1304 legalized:       false
   1305 regBankSelected: false
   1306 selected:        false
   1307 tracksRegLiveness: true
   1308 registers:       
   1309   - { id: 0, class: g8rc, preferred-register: '' }
   1310   - { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' }
   1311   - { id: 2, class: gprc, preferred-register: '' }
   1312   - { id: 3, class: g8rc, preferred-register: '' }
   1313 liveins:         
   1314   - { reg: '$x3', virtual-reg: '%0' }
   1315 frameInfo:       
   1316   isFrameAddressTaken: false
   1317   isReturnAddressTaken: false
   1318   hasStackMap:     false
   1319   hasPatchPoint:   false
   1320   stackSize:       0
   1321   offsetAdjustment: 0
   1322   maxAlignment:    0
   1323   adjustsStack:    false
   1324   hasCalls:        false
   1325   stackProtector:  ''
   1326   maxCallFrameSize: 4294967295
   1327   hasOpaqueSPAdjustment: false
   1328   hasVAStart:      false
   1329   hasMustTailInVarArgFunc: false
   1330   savePoint:       ''
   1331   restorePoint:    ''
   1332 fixedStack:      
   1333 stack:           
   1334 constants:       
   1335 body:             |
   1336   bb.0.entry:
   1337     liveins: $x3
   1338   
   1339     %0 = COPY $x3
   1340     %1 = LI 77
   1341     %2 = ADDI killed %1, 44
   1342     %3 = EXTSW_32_64 killed %2
   1343     ; CHECK: LI 121
   1344     ; CHECK-LATE: li 3, 121
   1345     $x3 = COPY %3
   1346     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1347 
   1348 ...
   1349 ---
   1350 name:            testADDI8
   1351 # CHECK-ALL: name: testADDI8
   1352 alignment:       4
   1353 exposesReturnsTwice: false
   1354 legalized:       false
   1355 regBankSelected: false
   1356 selected:        false
   1357 tracksRegLiveness: true
   1358 registers:       
   1359   - { id: 0, class: g8rc, preferred-register: '' }
   1360   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1361   - { id: 2, class: g8rc, preferred-register: '' }
   1362   - { id: 3, class: g8rc, preferred-register: '' }
   1363 liveins:         
   1364   - { reg: '$x3', virtual-reg: '%0' }
   1365 frameInfo:       
   1366   isFrameAddressTaken: false
   1367   isReturnAddressTaken: false
   1368   hasStackMap:     false
   1369   hasPatchPoint:   false
   1370   stackSize:       0
   1371   offsetAdjustment: 0
   1372   maxAlignment:    0
   1373   adjustsStack:    false
   1374   hasCalls:        false
   1375   stackProtector:  ''
   1376   maxCallFrameSize: 4294967295
   1377   hasOpaqueSPAdjustment: false
   1378   hasVAStart:      false
   1379   hasMustTailInVarArgFunc: false
   1380   savePoint:       ''
   1381   restorePoint:    ''
   1382 fixedStack:      
   1383 stack:           
   1384 constants:       
   1385 body:             |
   1386   bb.0.entry:
   1387     liveins: $x3
   1388   
   1389     %0 = COPY $x3
   1390     %1 = LI8 333
   1391     %2 = ADDI8 killed %1, 44
   1392     ; CHECK: LI8 377
   1393     ; CHECK-LATE: li 3, 377
   1394     %3 = EXTSW killed %2
   1395     $x3 = COPY %3
   1396     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1397 
   1398 ...
   1399 ---
   1400 name:            testANDo
   1401 # CHECK-ALL: name: testANDo
   1402 alignment:       4
   1403 exposesReturnsTwice: false
   1404 legalized:       false
   1405 regBankSelected: false
   1406 selected:        false
   1407 tracksRegLiveness: true
   1408 registers:       
   1409   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1410   - { id: 1, class: gprc, preferred-register: '' }
   1411   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   1412   - { id: 3, class: gprc, preferred-register: '' }
   1413   - { id: 4, class: crrc, preferred-register: '' }
   1414   - { id: 5, class: gprc, preferred-register: '' }
   1415   - { id: 6, class: g8rc, preferred-register: '' }
   1416 liveins:         
   1417   - { reg: '$x3', virtual-reg: '%0' }
   1418   - { reg: '$x4', virtual-reg: '%1' }
   1419 frameInfo:       
   1420   isFrameAddressTaken: false
   1421   isReturnAddressTaken: false
   1422   hasStackMap:     false
   1423   hasPatchPoint:   false
   1424   stackSize:       0
   1425   offsetAdjustment: 0
   1426   maxAlignment:    0
   1427   adjustsStack:    false
   1428   hasCalls:        false
   1429   stackProtector:  ''
   1430   maxCallFrameSize: 4294967295
   1431   hasOpaqueSPAdjustment: false
   1432   hasVAStart:      false
   1433   hasMustTailInVarArgFunc: false
   1434   savePoint:       ''
   1435   restorePoint:    ''
   1436 fixedStack:      
   1437 stack:           
   1438 constants:       
   1439 body:             |
   1440   bb.0.entry:
   1441     liveins: $x3, $x4
   1442   
   1443     %1 = LI 78
   1444     %0 = COPY $x3
   1445     %2 = COPY %0.sub_32
   1446     %3 = ANDo %1, %2, implicit-def $cr0
   1447     ; CHECK: ANDIo %2, 78, implicit-def $cr0
   1448     ; CHECK-LATE: andi. 5, 3, 78
   1449     %4 = COPY killed $cr0
   1450     %5 = ISEL %2, %1, %4.sub_eq
   1451     %6 = EXTSW_32_64 killed %5
   1452     $x3 = COPY %6
   1453     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1454 
   1455 ...
   1456 ---
   1457 name:            testAND8o
   1458 # CHECK-ALL: name: testAND8o
   1459 alignment:       4
   1460 exposesReturnsTwice: false
   1461 legalized:       false
   1462 regBankSelected: false
   1463 selected:        false
   1464 tracksRegLiveness: true
   1465 registers:       
   1466   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1467   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1468   - { id: 2, class: g8rc, preferred-register: '' }
   1469   - { id: 3, class: crrc, preferred-register: '' }
   1470   - { id: 4, class: g8rc, preferred-register: '' }
   1471 liveins:         
   1472   - { reg: '$x3', virtual-reg: '%0' }
   1473   - { reg: '$x4', virtual-reg: '%1' }
   1474 frameInfo:       
   1475   isFrameAddressTaken: false
   1476   isReturnAddressTaken: false
   1477   hasStackMap:     false
   1478   hasPatchPoint:   false
   1479   stackSize:       0
   1480   offsetAdjustment: 0
   1481   maxAlignment:    0
   1482   adjustsStack:    false
   1483   hasCalls:        false
   1484   stackProtector:  ''
   1485   maxCallFrameSize: 4294967295
   1486   hasOpaqueSPAdjustment: false
   1487   hasVAStart:      false
   1488   hasMustTailInVarArgFunc: false
   1489   savePoint:       ''
   1490   restorePoint:    ''
   1491 fixedStack:      
   1492 stack:           
   1493 constants:       
   1494 body:             |
   1495   bb.0.entry:
   1496     liveins: $x3, $x4
   1497   
   1498     %1 = LI8 321
   1499     %0 = COPY $x3
   1500     %2 = AND8o %1, %0, implicit-def $cr0
   1501     ; CHECK: ANDIo8 %0, 321, implicit-def $cr0
   1502     ; CHECK-LATE: andi. 5, 3, 321
   1503     %3 = COPY killed $cr0
   1504     %4 = ISEL8 %1, %0, %3.sub_eq
   1505     $x3 = COPY %4
   1506     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1507 
   1508 ...
   1509 ---
   1510 name:            testCMPD
   1511 # CHECK-ALL: name: testCMPD
   1512 alignment:       4
   1513 exposesReturnsTwice: false
   1514 legalized:       false
   1515 regBankSelected: false
   1516 selected:        false
   1517 tracksRegLiveness: true
   1518 registers:       
   1519   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1520   - { id: 1, class: g8rc, preferred-register: '' }
   1521   - { id: 2, class: crrc, preferred-register: '' }
   1522   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1523   - { id: 4, class: g8rc, preferred-register: '' }
   1524   - { id: 5, class: g8rc, preferred-register: '' }
   1525 liveins:         
   1526   - { reg: '$x3', virtual-reg: '%0' }
   1527   - { reg: '$x4', virtual-reg: '%1' }
   1528 frameInfo:       
   1529   isFrameAddressTaken: false
   1530   isReturnAddressTaken: false
   1531   hasStackMap:     false
   1532   hasPatchPoint:   false
   1533   stackSize:       0
   1534   offsetAdjustment: 0
   1535   maxAlignment:    0
   1536   adjustsStack:    false
   1537   hasCalls:        false
   1538   stackProtector:  ''
   1539   maxCallFrameSize: 4294967295
   1540   hasOpaqueSPAdjustment: false
   1541   hasVAStart:      false
   1542   hasMustTailInVarArgFunc: false
   1543   savePoint:       ''
   1544   restorePoint:    ''
   1545 fixedStack:      
   1546 stack:           
   1547 constants:       
   1548 body:             |
   1549   bb.0.entry:
   1550     liveins: $x3, $x4
   1551   
   1552     %1 = LI8 65533
   1553     %0 = COPY $x3
   1554     %2 = CMPD %0, %1
   1555     ; CHECK: CMPDI %0, -3
   1556     ; CHECK-LATE: cmpdi 3, -3
   1557     %4 = ISEL8 $zero8, %0, %2.sub_gt
   1558     %5 = ADD8 killed %4, %1
   1559     $x3 = COPY %5
   1560     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1561 
   1562 ...
   1563 ---
   1564 name:            testCMPDI
   1565 # CHECK-ALL: name: testCMPDI
   1566 alignment:       4
   1567 exposesReturnsTwice: false
   1568 legalized:       false
   1569 regBankSelected: false
   1570 selected:        false
   1571 tracksRegLiveness: true
   1572 registers:       
   1573   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1574   - { id: 1, class: g8rc, preferred-register: '' }
   1575   - { id: 2, class: crrc, preferred-register: '' }
   1576   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1577   - { id: 4, class: g8rc, preferred-register: '' }
   1578   - { id: 5, class: g8rc, preferred-register: '' }
   1579 liveins:         
   1580   - { reg: '$x3', virtual-reg: '%0' }
   1581   - { reg: '$x4', virtual-reg: '%1' }
   1582 frameInfo:       
   1583   isFrameAddressTaken: false
   1584   isReturnAddressTaken: false
   1585   hasStackMap:     false
   1586   hasPatchPoint:   false
   1587   stackSize:       0
   1588   offsetAdjustment: 0
   1589   maxAlignment:    0
   1590   adjustsStack:    false
   1591   hasCalls:        false
   1592   stackProtector:  ''
   1593   maxCallFrameSize: 4294967295
   1594   hasOpaqueSPAdjustment: false
   1595   hasVAStart:      false
   1596   hasMustTailInVarArgFunc: false
   1597   savePoint:       ''
   1598   restorePoint:    ''
   1599 fixedStack:      
   1600 stack:           
   1601 constants:       
   1602 body:             |
   1603   bb.0.entry:
   1604     liveins: $x3, $x4
   1605   
   1606     %1 = COPY $x4
   1607     %0 = LI8 89
   1608     %2 = CMPDI %0, 87
   1609     %4 = ISEL8 $zero8, %0, %2.sub_gt
   1610     ; CHECK: LI8 0
   1611     %5 = ADD8 killed %4, %1
   1612     $x3 = COPY %5
   1613     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1614 
   1615 ...
   1616 ---
   1617 name:            testCMPDI_F
   1618 # CHECK-ALL: name: testCMPDI_F
   1619 alignment:       4
   1620 exposesReturnsTwice: false
   1621 legalized:       false
   1622 regBankSelected: false
   1623 selected:        false
   1624 tracksRegLiveness: true
   1625 registers:       
   1626   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1627   - { id: 1, class: g8rc, preferred-register: '' }
   1628   - { id: 2, class: crrc, preferred-register: '' }
   1629   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1630   - { id: 4, class: g8rc, preferred-register: '' }
   1631   - { id: 5, class: g8rc, preferred-register: '' }
   1632 liveins:         
   1633   - { reg: '$x3', virtual-reg: '%0' }
   1634   - { reg: '$x4', virtual-reg: '%1' }
   1635 frameInfo:       
   1636   isFrameAddressTaken: false
   1637   isReturnAddressTaken: false
   1638   hasStackMap:     false
   1639   hasPatchPoint:   false
   1640   stackSize:       0
   1641   offsetAdjustment: 0
   1642   maxAlignment:    0
   1643   adjustsStack:    false
   1644   hasCalls:        false
   1645   stackProtector:  ''
   1646   maxCallFrameSize: 4294967295
   1647   hasOpaqueSPAdjustment: false
   1648   hasVAStart:      false
   1649   hasMustTailInVarArgFunc: false
   1650   savePoint:       ''
   1651   restorePoint:    ''
   1652 fixedStack:      
   1653 stack:           
   1654 constants:       
   1655 body:             |
   1656   bb.0.entry:
   1657     liveins: $x3, $x4
   1658   
   1659     %1 = COPY $x4
   1660     %0 = LI8 87
   1661     %2 = CMPDI %0, 87
   1662     %4 = ISEL8 $zero8, %0, %2.sub_gt
   1663     ; CHECK: COPY %0
   1664     %5 = ADD8 killed %4, %1
   1665     $x3 = COPY %5
   1666     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1667 
   1668 ...
   1669 ---
   1670 name:            testCMPLD
   1671 # CHECK-ALL: name: testCMPLD
   1672 alignment:       4
   1673 exposesReturnsTwice: false
   1674 legalized:       false
   1675 regBankSelected: false
   1676 selected:        false
   1677 tracksRegLiveness: true
   1678 registers:       
   1679   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1680   - { id: 1, class: g8rc, preferred-register: '' }
   1681   - { id: 2, class: crrc, preferred-register: '' }
   1682   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1683   - { id: 4, class: g8rc, preferred-register: '' }
   1684   - { id: 5, class: g8rc, preferred-register: '' }
   1685 liveins:         
   1686   - { reg: '$x3', virtual-reg: '%0' }
   1687   - { reg: '$x4', virtual-reg: '%1' }
   1688 frameInfo:       
   1689   isFrameAddressTaken: false
   1690   isReturnAddressTaken: false
   1691   hasStackMap:     false
   1692   hasPatchPoint:   false
   1693   stackSize:       0
   1694   offsetAdjustment: 0
   1695   maxAlignment:    0
   1696   adjustsStack:    false
   1697   hasCalls:        false
   1698   stackProtector:  ''
   1699   maxCallFrameSize: 4294967295
   1700   hasOpaqueSPAdjustment: false
   1701   hasVAStart:      false
   1702   hasMustTailInVarArgFunc: false
   1703   savePoint:       ''
   1704   restorePoint:    ''
   1705 fixedStack:      
   1706 stack:           
   1707 constants:       
   1708 body:             |
   1709   bb.0.entry:
   1710     liveins: $x3, $x4
   1711   
   1712     %1 = LI8 99
   1713     %0 = COPY $x3
   1714     %2 = CMPLD %0, %1
   1715     ; CHECK: CMPLDI %0, 99
   1716     ; CHECK-LATE: cmpldi 3, 99
   1717     %4 = ISEL8 $zero8, %0, %2.sub_gt
   1718     %5 = ADD8 killed %4, %1
   1719     $x3 = COPY %5
   1720     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1721 
   1722 ...
   1723 ---
   1724 name:            testCMPLDI
   1725 # CHECK-ALL: name: testCMPLDI
   1726 alignment:       4
   1727 exposesReturnsTwice: false
   1728 legalized:       false
   1729 regBankSelected: false
   1730 selected:        false
   1731 tracksRegLiveness: true
   1732 registers:       
   1733   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1734   - { id: 1, class: g8rc, preferred-register: '' }
   1735   - { id: 2, class: crrc, preferred-register: '' }
   1736   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   1737   - { id: 4, class: g8rc, preferred-register: '' }
   1738   - { id: 5, class: g8rc, preferred-register: '' }
   1739 liveins:         
   1740   - { reg: '$x3', virtual-reg: '%0' }
   1741   - { reg: '$x4', virtual-reg: '%1' }
   1742 frameInfo:       
   1743   isFrameAddressTaken: false
   1744   isReturnAddressTaken: false
   1745   hasStackMap:     false
   1746   hasPatchPoint:   false
   1747   stackSize:       0
   1748   offsetAdjustment: 0
   1749   maxAlignment:    0
   1750   adjustsStack:    false
   1751   hasCalls:        false
   1752   stackProtector:  ''
   1753   maxCallFrameSize: 4294967295
   1754   hasOpaqueSPAdjustment: false
   1755   hasVAStart:      false
   1756   hasMustTailInVarArgFunc: false
   1757   savePoint:       ''
   1758   restorePoint:    ''
   1759 fixedStack:      
   1760 stack:           
   1761 constants:       
   1762 body:             |
   1763   bb.0.entry:
   1764     liveins: $x3, $x4
   1765   
   1766     %1 = COPY $x4
   1767     %0 = LI8 65534
   1768     %2 = CMPLDI %0, 65535
   1769     %4 = ISEL8 $zero8, %0, %2.sub_gt
   1770     ; CHECK: COPY %0
   1771     %5 = ADD8 killed %4, %1
   1772     $x3 = COPY %5
   1773     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1774 
   1775 ...
   1776 ---
   1777 name:            testCMPW
   1778 # CHECK-ALL: name: testCMPW
   1779 alignment:       4
   1780 exposesReturnsTwice: false
   1781 legalized:       false
   1782 regBankSelected: false
   1783 selected:        false
   1784 tracksRegLiveness: true
   1785 registers:       
   1786   - { id: 0, class: g8rc, preferred-register: '' }
   1787   - { id: 1, class: g8rc, preferred-register: '' }
   1788   - { id: 2, class: gprc, preferred-register: '' }
   1789   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   1790   - { id: 4, class: crrc, preferred-register: '' }
   1791   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
   1792   - { id: 6, class: gprc, preferred-register: '' }
   1793   - { id: 7, class: gprc, preferred-register: '' }
   1794   - { id: 8, class: g8rc, preferred-register: '' }
   1795 liveins:         
   1796   - { reg: '$x3', virtual-reg: '%0' }
   1797   - { reg: '$x4', virtual-reg: '%1' }
   1798 frameInfo:       
   1799   isFrameAddressTaken: false
   1800   isReturnAddressTaken: false
   1801   hasStackMap:     false
   1802   hasPatchPoint:   false
   1803   stackSize:       0
   1804   offsetAdjustment: 0
   1805   maxAlignment:    0
   1806   adjustsStack:    false
   1807   hasCalls:        false
   1808   stackProtector:  ''
   1809   maxCallFrameSize: 4294967295
   1810   hasOpaqueSPAdjustment: false
   1811   hasVAStart:      false
   1812   hasMustTailInVarArgFunc: false
   1813   savePoint:       ''
   1814   restorePoint:    ''
   1815 fixedStack:      
   1816 stack:           
   1817 constants:       
   1818 body:             |
   1819   bb.0.entry:
   1820     liveins: $x3, $x4
   1821   
   1822     %1 = COPY $x4
   1823     %0 = COPY $x3
   1824     %2 = LI -1
   1825     %3 = COPY %0.sub_32
   1826     %4 = CMPW %3, %2
   1827     ; CHECK: CMPWI %3, -1
   1828     %6 = ISEL $zero, %3, %4.sub_gt
   1829     %7 = ADD4 killed %6, %2
   1830     %8 = EXTSW_32_64 killed %7
   1831     $x3 = COPY %8
   1832     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1833 
   1834 ...
   1835 ---
   1836 name:            testCMPWI
   1837 # CHECK-ALL: name: testCMPWI
   1838 alignment:       4
   1839 exposesReturnsTwice: false
   1840 legalized:       false
   1841 regBankSelected: false
   1842 selected:        false
   1843 tracksRegLiveness: true
   1844 registers:       
   1845   - { id: 0, class: g8rc, preferred-register: '' }
   1846   - { id: 1, class: g8rc, preferred-register: '' }
   1847   - { id: 2, class: gprc, preferred-register: '' }
   1848   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   1849   - { id: 4, class: crrc, preferred-register: '' }
   1850   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
   1851   - { id: 6, class: gprc, preferred-register: '' }
   1852   - { id: 7, class: gprc, preferred-register: '' }
   1853   - { id: 8, class: g8rc, preferred-register: '' }
   1854 liveins:         
   1855   - { reg: '$x3', virtual-reg: '%0' }
   1856   - { reg: '$x4', virtual-reg: '%1' }
   1857 frameInfo:       
   1858   isFrameAddressTaken: false
   1859   isReturnAddressTaken: false
   1860   hasStackMap:     false
   1861   hasPatchPoint:   false
   1862   stackSize:       0
   1863   offsetAdjustment: 0
   1864   maxAlignment:    0
   1865   adjustsStack:    false
   1866   hasCalls:        false
   1867   stackProtector:  ''
   1868   maxCallFrameSize: 4294967295
   1869   hasOpaqueSPAdjustment: false
   1870   hasVAStart:      false
   1871   hasMustTailInVarArgFunc: false
   1872   savePoint:       ''
   1873   restorePoint:    ''
   1874 fixedStack:      
   1875 stack:           
   1876 constants:       
   1877 body:             |
   1878   bb.0.entry:
   1879     liveins: $x3, $x4
   1880   
   1881     %1 = COPY $x4
   1882     %0 = COPY $x3
   1883     %2 = COPY %1.sub_32
   1884     %3 = LI -3
   1885     %4 = CMPWI %3, 87
   1886     %6 = ISEL $zero, %3, %4.sub_gt
   1887     ; CHECK: COPY %3
   1888     %7 = ADD4 killed %6, killed %2
   1889     %8 = EXTSW_32_64 killed %7
   1890     $x3 = COPY %8
   1891     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1892 
   1893 ...
   1894 ---
   1895 name:            testCMPLW
   1896 # CHECK-ALL: name: testCMPLW
   1897 alignment:       4
   1898 exposesReturnsTwice: false
   1899 legalized:       false
   1900 regBankSelected: false
   1901 selected:        false
   1902 tracksRegLiveness: true
   1903 registers:       
   1904   - { id: 0, class: g8rc, preferred-register: '' }
   1905   - { id: 1, class: g8rc, preferred-register: '' }
   1906   - { id: 2, class: gprc, preferred-register: '' }
   1907   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   1908   - { id: 4, class: crrc, preferred-register: '' }
   1909   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
   1910   - { id: 6, class: gprc, preferred-register: '' }
   1911   - { id: 7, class: gprc, preferred-register: '' }
   1912   - { id: 8, class: g8rc, preferred-register: '' }
   1913   - { id: 9, class: g8rc, preferred-register: '' }
   1914   - { id: 10, class: g8rc, preferred-register: '' }
   1915 liveins:         
   1916   - { reg: '$x3', virtual-reg: '%0' }
   1917   - { reg: '$x4', virtual-reg: '%1' }
   1918 frameInfo:       
   1919   isFrameAddressTaken: false
   1920   isReturnAddressTaken: false
   1921   hasStackMap:     false
   1922   hasPatchPoint:   false
   1923   stackSize:       0
   1924   offsetAdjustment: 0
   1925   maxAlignment:    0
   1926   adjustsStack:    false
   1927   hasCalls:        false
   1928   stackProtector:  ''
   1929   maxCallFrameSize: 4294967295
   1930   hasOpaqueSPAdjustment: false
   1931   hasVAStart:      false
   1932   hasMustTailInVarArgFunc: false
   1933   savePoint:       ''
   1934   restorePoint:    ''
   1935 fixedStack:      
   1936 stack:           
   1937 constants:       
   1938 body:             |
   1939   bb.0.entry:
   1940     liveins: $x3, $x4
   1941   
   1942     %1 = COPY $x4
   1943     %0 = COPY $x3
   1944     %2 = LI 32767
   1945     %3 = COPY %0.sub_32
   1946     %4 = CMPLW %3, %2
   1947     ; CHECK: CMPLWI %3, 32767
   1948     ; CHECK-LATE: cmplwi 3, 32767
   1949     %6 = ISEL $zero, %3, %4.sub_gt
   1950     %7 = ADD4 killed %6, %2
   1951     %9 = IMPLICIT_DEF
   1952     %8 = INSERT_SUBREG %9, killed %7, 1
   1953     %10 = RLDICL killed %8, 0, 32
   1954     $x3 = COPY %10
   1955     BLR8 implicit $lr8, implicit $rm, implicit $x3
   1956 
   1957 ...
   1958 ---
   1959 name:            testCMPLWI
   1960 # CHECK-ALL: name: testCMPLWI
   1961 alignment:       4
   1962 exposesReturnsTwice: false
   1963 legalized:       false
   1964 regBankSelected: false
   1965 selected:        false
   1966 tracksRegLiveness: true
   1967 registers:       
   1968   - { id: 0, class: g8rc, preferred-register: '' }
   1969   - { id: 1, class: g8rc, preferred-register: '' }
   1970   - { id: 2, class: gprc, preferred-register: '' }
   1971   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   1972   - { id: 4, class: crrc, preferred-register: '' }
   1973   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
   1974   - { id: 6, class: gprc, preferred-register: '' }
   1975   - { id: 7, class: gprc, preferred-register: '' }
   1976   - { id: 8, class: g8rc, preferred-register: '' }
   1977   - { id: 9, class: g8rc, preferred-register: '' }
   1978   - { id: 10, class: g8rc, preferred-register: '' }
   1979 liveins:         
   1980   - { reg: '$x3', virtual-reg: '%0' }
   1981   - { reg: '$x4', virtual-reg: '%1' }
   1982 frameInfo:       
   1983   isFrameAddressTaken: false
   1984   isReturnAddressTaken: false
   1985   hasStackMap:     false
   1986   hasPatchPoint:   false
   1987   stackSize:       0
   1988   offsetAdjustment: 0
   1989   maxAlignment:    0
   1990   adjustsStack:    false
   1991   hasCalls:        false
   1992   stackProtector:  ''
   1993   maxCallFrameSize: 4294967295
   1994   hasOpaqueSPAdjustment: false
   1995   hasVAStart:      false
   1996   hasMustTailInVarArgFunc: false
   1997   savePoint:       ''
   1998   restorePoint:    ''
   1999 fixedStack:      
   2000 stack:           
   2001 constants:       
   2002 body:             |
   2003   bb.0.entry:
   2004     liveins: $x3, $x4
   2005   
   2006     %1 = COPY $x4
   2007     %0 = COPY $x3
   2008     %2 = COPY %1.sub_32
   2009     %3 = LI -3
   2010     %4 = CMPLWI %3, 87
   2011     %6 = ISEL $zero, %3, %4.sub_gt
   2012     ; CHECK: LI 0
   2013     %7 = ADD4 killed %6, killed %2
   2014     %9 = IMPLICIT_DEF
   2015     %8 = INSERT_SUBREG %9, killed %7, 1
   2016     %10 = RLDICL killed %8, 0, 32
   2017     $x3 = COPY %10
   2018     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2019 
   2020 ...
   2021 ---
   2022 name:            testLBZUX
   2023 # CHECK-ALL: name: testLBZUX
   2024 alignment:       4
   2025 exposesReturnsTwice: false
   2026 legalized:       false
   2027 regBankSelected: false
   2028 selected:        false
   2029 tracksRegLiveness: true
   2030 registers:       
   2031   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2032   - { id: 1, class: g8rc, preferred-register: '' }
   2033   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2034   - { id: 3, class: gprc, preferred-register: '' }
   2035   - { id: 4, class: g8rc, preferred-register: '' }
   2036   - { id: 5, class: g8rc, preferred-register: '' }
   2037   - { id: 6, class: g8rc, preferred-register: '' }
   2038   - { id: 7, class: gprc, preferred-register: '' }
   2039   - { id: 8, class: gprc, preferred-register: '' }
   2040   - { id: 9, class: g8rc, preferred-register: '' }
   2041   - { id: 10, class: g8rc, preferred-register: '' }
   2042   - { id: 11, class: g8rc, preferred-register: '' }
   2043   - { id: 12, class: gprc, preferred-register: '' }
   2044   - { id: 13, class: gprc, preferred-register: '' }
   2045   - { id: 14, class: g8rc, preferred-register: '' }
   2046   - { id: 15, class: g8rc, preferred-register: '' }
   2047   - { id: 16, class: g8rc, preferred-register: '' }
   2048   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2049 liveins:         
   2050   - { reg: '$x3', virtual-reg: '%0' }
   2051   - { reg: '$x4', virtual-reg: '%1' }
   2052 frameInfo:       
   2053   isFrameAddressTaken: false
   2054   isReturnAddressTaken: false
   2055   hasStackMap:     false
   2056   hasPatchPoint:   false
   2057   stackSize:       0
   2058   offsetAdjustment: 0
   2059   maxAlignment:    0
   2060   adjustsStack:    false
   2061   hasCalls:        false
   2062   stackProtector:  ''
   2063   maxCallFrameSize: 4294967295
   2064   hasOpaqueSPAdjustment: false
   2065   hasVAStart:      false
   2066   hasMustTailInVarArgFunc: false
   2067   savePoint:       ''
   2068   restorePoint:    ''
   2069 fixedStack:      
   2070 stack:           
   2071 constants:       
   2072 body:             |
   2073   bb.0.entry:
   2074     liveins: $x3, $x4
   2075   
   2076     %1 = COPY $x4
   2077     %0 = COPY $x3
   2078     %2 = COPY %1.sub_32
   2079     %3 = ADDI %2, 1
   2080     %5 = IMPLICIT_DEF
   2081     %4 = INSERT_SUBREG %5, killed %3, 1
   2082     %6 = RLDICL killed %4, 0, 32
   2083     %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
   2084     %8 = ADDI %2, 2
   2085     %10 = IMPLICIT_DEF
   2086     %9 = INSERT_SUBREG %10, killed %8, 1
   2087     %11 = LI8 -15
   2088     %12,%17 = LBZUX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
   2089     ; CHECK: LBZU -15, %0
   2090     ; CHECK-LATE: lbzu 5, -15(3)
   2091     %13 = ADD4 killed %12, killed %7
   2092     %15 = IMPLICIT_DEF
   2093     %14 = INSERT_SUBREG %15, killed %13, 1
   2094     %16 = RLWINM8 killed %14, 0, 24, 31
   2095     $x3 = COPY %16
   2096     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2097 
   2098 ...
   2099 ---
   2100 name:            testLBZX
   2101 # CHECK-ALL: name: testLBZX
   2102 alignment:       4
   2103 exposesReturnsTwice: false
   2104 legalized:       false
   2105 regBankSelected: false
   2106 selected:        false
   2107 tracksRegLiveness: true
   2108 registers:       
   2109   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2110   - { id: 1, class: g8rc, preferred-register: '' }
   2111   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2112   - { id: 3, class: gprc, preferred-register: '' }
   2113   - { id: 4, class: g8rc, preferred-register: '' }
   2114   - { id: 5, class: g8rc, preferred-register: '' }
   2115   - { id: 6, class: g8rc, preferred-register: '' }
   2116   - { id: 7, class: gprc, preferred-register: '' }
   2117   - { id: 8, class: gprc, preferred-register: '' }
   2118   - { id: 9, class: g8rc, preferred-register: '' }
   2119   - { id: 10, class: g8rc, preferred-register: '' }
   2120   - { id: 11, class: g8rc, preferred-register: '' }
   2121   - { id: 12, class: gprc, preferred-register: '' }
   2122   - { id: 13, class: gprc, preferred-register: '' }
   2123   - { id: 14, class: g8rc, preferred-register: '' }
   2124   - { id: 15, class: g8rc, preferred-register: '' }
   2125   - { id: 16, class: g8rc, preferred-register: '' }
   2126 liveins:         
   2127   - { reg: '$x3', virtual-reg: '%0' }
   2128   - { reg: '$x4', virtual-reg: '%1' }
   2129 frameInfo:       
   2130   isFrameAddressTaken: false
   2131   isReturnAddressTaken: false
   2132   hasStackMap:     false
   2133   hasPatchPoint:   false
   2134   stackSize:       0
   2135   offsetAdjustment: 0
   2136   maxAlignment:    0
   2137   adjustsStack:    false
   2138   hasCalls:        false
   2139   stackProtector:  ''
   2140   maxCallFrameSize: 4294967295
   2141   hasOpaqueSPAdjustment: false
   2142   hasVAStart:      false
   2143   hasMustTailInVarArgFunc: false
   2144   savePoint:       ''
   2145   restorePoint:    ''
   2146 fixedStack:      
   2147 stack:           
   2148 constants:       
   2149 body:             |
   2150   bb.0.entry:
   2151     liveins: $x3, $x4
   2152   
   2153     %1 = COPY $x4
   2154     %0 = LI8 45
   2155     %2 = COPY %1.sub_32
   2156     %3 = ADDI %2, 1
   2157     %5 = IMPLICIT_DEF
   2158     %4 = INSERT_SUBREG %5, killed %3, 1
   2159     %6 = RLDICL killed %4, 0, 32
   2160     %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
   2161     ; CHECK: LBZ 45, killed %6
   2162     ; CHECK-LATE: lbz 5, 45(5)
   2163     %8 = ADDI %2, 2
   2164     %10 = IMPLICIT_DEF
   2165     %9 = INSERT_SUBREG %10, killed %8, 1
   2166     %11 = RLDICL killed %9, 0, 32
   2167     %12 = LBZX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
   2168     ; CHECK: LBZ 45, killed %11
   2169     ; CHECK-LATE: lbz 3, 45(4)
   2170     %13 = ADD4 killed %12, killed %7
   2171     %15 = IMPLICIT_DEF
   2172     %14 = INSERT_SUBREG %15, killed %13, 1
   2173     %16 = RLWINM8 killed %14, 0, 24, 31
   2174     $x3 = COPY %16
   2175     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2176 
   2177 ...
   2178 ---
   2179 name:            testLHZUX
   2180 # CHECK-ALL: name: testLHZUX
   2181 alignment:       4
   2182 exposesReturnsTwice: false
   2183 legalized:       false
   2184 regBankSelected: false
   2185 selected:        false
   2186 tracksRegLiveness: true
   2187 registers:       
   2188   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2189   - { id: 1, class: g8rc, preferred-register: '' }
   2190   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2191   - { id: 3, class: gprc, preferred-register: '' }
   2192   - { id: 4, class: g8rc, preferred-register: '' }
   2193   - { id: 5, class: g8rc, preferred-register: '' }
   2194   - { id: 6, class: g8rc, preferred-register: '' }
   2195   - { id: 7, class: gprc, preferred-register: '' }
   2196   - { id: 8, class: gprc, preferred-register: '' }
   2197   - { id: 9, class: g8rc, preferred-register: '' }
   2198   - { id: 10, class: g8rc, preferred-register: '' }
   2199   - { id: 11, class: g8rc, preferred-register: '' }
   2200   - { id: 12, class: gprc, preferred-register: '' }
   2201   - { id: 13, class: gprc, preferred-register: '' }
   2202   - { id: 14, class: g8rc, preferred-register: '' }
   2203   - { id: 15, class: g8rc, preferred-register: '' }
   2204   - { id: 16, class: g8rc, preferred-register: '' }
   2205   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2206 liveins:         
   2207   - { reg: '$x3', virtual-reg: '%0' }
   2208   - { reg: '$x4', virtual-reg: '%1' }
   2209 frameInfo:       
   2210   isFrameAddressTaken: false
   2211   isReturnAddressTaken: false
   2212   hasStackMap:     false
   2213   hasPatchPoint:   false
   2214   stackSize:       0
   2215   offsetAdjustment: 0
   2216   maxAlignment:    0
   2217   adjustsStack:    false
   2218   hasCalls:        false
   2219   stackProtector:  ''
   2220   maxCallFrameSize: 4294967295
   2221   hasOpaqueSPAdjustment: false
   2222   hasVAStart:      false
   2223   hasMustTailInVarArgFunc: false
   2224   savePoint:       ''
   2225   restorePoint:    ''
   2226 fixedStack:      
   2227 stack:           
   2228 constants:       
   2229 body:             |
   2230   bb.0.entry:
   2231     liveins: $x3, $x4
   2232   
   2233     %1 = COPY $x4
   2234     %0 = COPY $x3
   2235     %2 = COPY %1.sub_32
   2236     %3 = ADDI %2, 1
   2237     %5 = IMPLICIT_DEF
   2238     %4 = INSERT_SUBREG %5, killed %3, 1
   2239     %6 = RLDIC killed %4, 1, 31
   2240     %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
   2241     %8 = ADDI %2, 2
   2242     %10 = IMPLICIT_DEF
   2243     %9 = INSERT_SUBREG %10, killed %8, 1
   2244     %11 = LI8 31440
   2245     %12,%17 = LHZUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
   2246     ; CHECK: LHZU 31440, %0
   2247     ; CHECK-LATE: lhzu 5, 31440(3)
   2248     %13 = ADD4 killed %12, killed %7
   2249     %15 = IMPLICIT_DEF
   2250     %14 = INSERT_SUBREG %15, killed %13, 1
   2251     %16 = RLWINM8 killed %14, 0, 16, 31
   2252     $x3 = COPY %16
   2253     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2254 
   2255 ...
   2256 ---
   2257 name:            testLHZX
   2258 # CHECK-ALL: name: testLHZX
   2259 alignment:       4
   2260 exposesReturnsTwice: false
   2261 legalized:       false
   2262 regBankSelected: false
   2263 selected:        false
   2264 tracksRegLiveness: true
   2265 registers:       
   2266   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2267   - { id: 1, class: g8rc, preferred-register: '' }
   2268   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2269   - { id: 3, class: gprc, preferred-register: '' }
   2270   - { id: 4, class: g8rc, preferred-register: '' }
   2271   - { id: 5, class: g8rc, preferred-register: '' }
   2272   - { id: 6, class: g8rc, preferred-register: '' }
   2273   - { id: 7, class: gprc, preferred-register: '' }
   2274   - { id: 8, class: gprc, preferred-register: '' }
   2275   - { id: 9, class: g8rc, preferred-register: '' }
   2276   - { id: 10, class: g8rc, preferred-register: '' }
   2277   - { id: 11, class: g8rc, preferred-register: '' }
   2278   - { id: 12, class: gprc, preferred-register: '' }
   2279   - { id: 13, class: gprc, preferred-register: '' }
   2280   - { id: 14, class: g8rc, preferred-register: '' }
   2281   - { id: 15, class: g8rc, preferred-register: '' }
   2282   - { id: 16, class: g8rc, preferred-register: '' }
   2283 liveins:         
   2284   - { reg: '$x3', virtual-reg: '%0' }
   2285   - { reg: '$x4', virtual-reg: '%1' }
   2286 frameInfo:       
   2287   isFrameAddressTaken: false
   2288   isReturnAddressTaken: false
   2289   hasStackMap:     false
   2290   hasPatchPoint:   false
   2291   stackSize:       0
   2292   offsetAdjustment: 0
   2293   maxAlignment:    0
   2294   adjustsStack:    false
   2295   hasCalls:        false
   2296   stackProtector:  ''
   2297   maxCallFrameSize: 4294967295
   2298   hasOpaqueSPAdjustment: false
   2299   hasVAStart:      false
   2300   hasMustTailInVarArgFunc: false
   2301   savePoint:       ''
   2302   restorePoint:    ''
   2303 fixedStack:      
   2304 stack:           
   2305 constants:       
   2306 body:             |
   2307   bb.0.entry:
   2308     liveins: $x3, $x4
   2309   
   2310     %1 = COPY $x4
   2311     %0 = COPY $x3
   2312     %2 = COPY %1.sub_32
   2313     %3 = ADDI %2, 1
   2314     %5 = IMPLICIT_DEF
   2315     %4 = INSERT_SUBREG %5, killed %3, 1
   2316     %6 = RLDIC killed %4, 1, 31
   2317     %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
   2318     %8 = ADDI %2, 2
   2319     %10 = IMPLICIT_DEF
   2320     %9 = INSERT_SUBREG %10, killed %8, 1
   2321     %11 = LI8 882
   2322     %12 = LHZX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
   2323     ; CHECK: LHZ 882, %0
   2324     ; CHECK-LATE: lhz 3, 882(3)
   2325     %13 = ADD4 killed %12, killed %7
   2326     %15 = IMPLICIT_DEF
   2327     %14 = INSERT_SUBREG %15, killed %13, 1
   2328     %16 = RLWINM8 killed %14, 0, 16, 31
   2329     $x3 = COPY %16
   2330     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2331 
   2332 ...
   2333 ---
   2334 name:            testLHAUX
   2335 # CHECK-ALL: name: testLHAUX
   2336 alignment:       4
   2337 exposesReturnsTwice: false
   2338 legalized:       false
   2339 regBankSelected: false
   2340 selected:        false
   2341 tracksRegLiveness: true
   2342 registers:       
   2343   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2344   - { id: 1, class: g8rc, preferred-register: '' }
   2345   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2346   - { id: 3, class: gprc, preferred-register: '' }
   2347   - { id: 4, class: g8rc, preferred-register: '' }
   2348   - { id: 5, class: g8rc, preferred-register: '' }
   2349   - { id: 6, class: g8rc, preferred-register: '' }
   2350   - { id: 7, class: gprc, preferred-register: '' }
   2351   - { id: 8, class: gprc, preferred-register: '' }
   2352   - { id: 9, class: g8rc, preferred-register: '' }
   2353   - { id: 10, class: g8rc, preferred-register: '' }
   2354   - { id: 11, class: g8rc, preferred-register: '' }
   2355   - { id: 12, class: gprc, preferred-register: '' }
   2356   - { id: 13, class: gprc, preferred-register: '' }
   2357   - { id: 14, class: g8rc, preferred-register: '' }
   2358   - { id: 15, class: g8rc, preferred-register: '' }
   2359   - { id: 16, class: g8rc, preferred-register: '' }
   2360   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2361 liveins:         
   2362   - { reg: '$x3', virtual-reg: '%0' }
   2363   - { reg: '$x4', virtual-reg: '%1' }
   2364 frameInfo:       
   2365   isFrameAddressTaken: false
   2366   isReturnAddressTaken: false
   2367   hasStackMap:     false
   2368   hasPatchPoint:   false
   2369   stackSize:       0
   2370   offsetAdjustment: 0
   2371   maxAlignment:    0
   2372   adjustsStack:    false
   2373   hasCalls:        false
   2374   stackProtector:  ''
   2375   maxCallFrameSize: 4294967295
   2376   hasOpaqueSPAdjustment: false
   2377   hasVAStart:      false
   2378   hasMustTailInVarArgFunc: false
   2379   savePoint:       ''
   2380   restorePoint:    ''
   2381 fixedStack:      
   2382 stack:           
   2383 constants:       
   2384 body:             |
   2385   bb.0.entry:
   2386     liveins: $x3, $x4
   2387   
   2388     %1 = COPY $x4
   2389     %0 = COPY $x3
   2390     %2 = COPY %1.sub_32
   2391     %3 = ADDI %2, 1
   2392     %5 = IMPLICIT_DEF
   2393     %4 = INSERT_SUBREG %5, killed %3, 1
   2394     %6 = RLDIC %4, 1, 31
   2395     %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
   2396     %8 = ADDI %2, 2
   2397     %10 = IMPLICIT_DEF
   2398     %9 = INSERT_SUBREG %10, killed %8, 1
   2399     %11 = LI8 400
   2400     %12,%17 = LHAUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
   2401     ; CHECK: LHAU 400, %0
   2402     ; CHECK-LATE: lhau 5, 400(3)
   2403     %13 = ADD4 killed %12, killed %7
   2404     %15 = IMPLICIT_DEF
   2405     %14 = INSERT_SUBREG %15, killed %13, 1
   2406     %16 = EXTSH8 killed %14
   2407     $x3 = COPY %16
   2408     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2409 
   2410 ...
   2411 ---
   2412 name:            testLHAX
   2413 # CHECK-ALL: name: testLHAX
   2414 alignment:       4
   2415 exposesReturnsTwice: false
   2416 legalized:       false
   2417 regBankSelected: false
   2418 selected:        false
   2419 tracksRegLiveness: true
   2420 registers:       
   2421   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2422   - { id: 1, class: g8rc, preferred-register: '' }
   2423   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2424   - { id: 3, class: gprc, preferred-register: '' }
   2425   - { id: 4, class: g8rc, preferred-register: '' }
   2426   - { id: 5, class: g8rc, preferred-register: '' }
   2427   - { id: 6, class: g8rc, preferred-register: '' }
   2428   - { id: 7, class: gprc, preferred-register: '' }
   2429   - { id: 8, class: gprc, preferred-register: '' }
   2430   - { id: 9, class: g8rc, preferred-register: '' }
   2431   - { id: 10, class: g8rc, preferred-register: '' }
   2432   - { id: 11, class: g8rc, preferred-register: '' }
   2433   - { id: 12, class: gprc, preferred-register: '' }
   2434   - { id: 13, class: gprc, preferred-register: '' }
   2435   - { id: 14, class: g8rc, preferred-register: '' }
   2436   - { id: 15, class: g8rc, preferred-register: '' }
   2437   - { id: 16, class: g8rc, preferred-register: '' }
   2438 liveins:         
   2439   - { reg: '$x3', virtual-reg: '%0' }
   2440   - { reg: '$x4', virtual-reg: '%1' }
   2441 frameInfo:       
   2442   isFrameAddressTaken: false
   2443   isReturnAddressTaken: false
   2444   hasStackMap:     false
   2445   hasPatchPoint:   false
   2446   stackSize:       0
   2447   offsetAdjustment: 0
   2448   maxAlignment:    0
   2449   adjustsStack:    false
   2450   hasCalls:        false
   2451   stackProtector:  ''
   2452   maxCallFrameSize: 4294967295
   2453   hasOpaqueSPAdjustment: false
   2454   hasVAStart:      false
   2455   hasMustTailInVarArgFunc: false
   2456   savePoint:       ''
   2457   restorePoint:    ''
   2458 fixedStack:      
   2459 stack:           
   2460 constants:       
   2461 body:             |
   2462   bb.0.entry:
   2463     liveins: $x3, $x4
   2464   
   2465     %1 = COPY $x4
   2466     %0 = COPY $x3
   2467     %2 = COPY %1.sub_32
   2468     %3 = ADDI %2, 1
   2469     %5 = IMPLICIT_DEF
   2470     %4 = INSERT_SUBREG %5, killed %3, 1
   2471     %6 = LI8 -999
   2472     %7 = LHAX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
   2473     ; CHECK: LHA -999, %0
   2474     ; CHECK-LATE: lha 4, -999(3)
   2475     %8 = ADDI %2, 2
   2476     %10 = IMPLICIT_DEF
   2477     %9 = INSERT_SUBREG %10, killed %8, 1
   2478     %11 = LI8 999
   2479     %12 = LHAX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
   2480     ; CHECK: LHA 999, %0 
   2481     ; CHECK-LATE: lha 3, 999(3)
   2482     %13 = ADD4 killed %12, killed %7
   2483     %15 = IMPLICIT_DEF
   2484     %14 = INSERT_SUBREG %15, killed %13, 1
   2485     %16 = EXTSH8 killed %14
   2486     $x3 = COPY %16
   2487     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2488 
   2489 ...
   2490 ---
   2491 name:            testLWZUX
   2492 # CHECK-ALL: name: testLWZUX
   2493 alignment:       4
   2494 exposesReturnsTwice: false
   2495 legalized:       false
   2496 regBankSelected: false
   2497 selected:        false
   2498 tracksRegLiveness: true
   2499 registers:       
   2500   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2501   - { id: 1, class: g8rc, preferred-register: '' }
   2502   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2503   - { id: 3, class: gprc, preferred-register: '' }
   2504   - { id: 4, class: g8rc, preferred-register: '' }
   2505   - { id: 5, class: g8rc, preferred-register: '' }
   2506   - { id: 6, class: g8rc, preferred-register: '' }
   2507   - { id: 7, class: gprc, preferred-register: '' }
   2508   - { id: 8, class: gprc, preferred-register: '' }
   2509   - { id: 9, class: g8rc, preferred-register: '' }
   2510   - { id: 10, class: g8rc, preferred-register: '' }
   2511   - { id: 11, class: g8rc, preferred-register: '' }
   2512   - { id: 12, class: gprc, preferred-register: '' }
   2513   - { id: 13, class: gprc, preferred-register: '' }
   2514   - { id: 14, class: g8rc, preferred-register: '' }
   2515   - { id: 15, class: g8rc, preferred-register: '' }
   2516   - { id: 16, class: g8rc, preferred-register: '' }
   2517   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2518   - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2519 liveins:         
   2520   - { reg: '$x3', virtual-reg: '%0' }
   2521   - { reg: '$x4', virtual-reg: '%1' }
   2522 frameInfo:       
   2523   isFrameAddressTaken: false
   2524   isReturnAddressTaken: false
   2525   hasStackMap:     false
   2526   hasPatchPoint:   false
   2527   stackSize:       0
   2528   offsetAdjustment: 0
   2529   maxAlignment:    0
   2530   adjustsStack:    false
   2531   hasCalls:        false
   2532   stackProtector:  ''
   2533   maxCallFrameSize: 4294967295
   2534   hasOpaqueSPAdjustment: false
   2535   hasVAStart:      false
   2536   hasMustTailInVarArgFunc: false
   2537   savePoint:       ''
   2538   restorePoint:    ''
   2539 fixedStack:      
   2540 stack:           
   2541 constants:       
   2542 body:             |
   2543   bb.0.entry:
   2544     liveins: $x3, $x4
   2545   
   2546     %1 = COPY $x4
   2547     %0 = COPY $x3
   2548     %2 = COPY %1.sub_32
   2549     %3 = ADDI %2, 1
   2550     %5 = IMPLICIT_DEF
   2551     %4 = INSERT_SUBREG %5, killed %3, 1
   2552     %6 = LI8 889
   2553     %7,%17 = LWZUX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
   2554     ; CHECK: LWZU 889, %0
   2555     ; CHECK-LATE: lwzu {{[0-9]+}}, 889({{[0-9]+}})
   2556     %8 = ADDI %2, 2
   2557     %10 = IMPLICIT_DEF
   2558     %9 = INSERT_SUBREG %10, killed %8, 1
   2559     %11 = LI8 -2
   2560     %12,%18 = LWZUX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
   2561     ; CHECK: LWZU -2, %0
   2562     ; CHECK-LATE: lwzu {{[0-9]+}}, -2({{[0-9]+}})
   2563     %13 = ADD4 killed %12, killed %7
   2564     %15 = IMPLICIT_DEF
   2565     %14 = INSERT_SUBREG %15, killed %13, 1
   2566     %16 = RLDICL killed %14, 0, 32
   2567     $x3 = COPY %16
   2568     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2569 
   2570 ...
   2571 ---
   2572 name:            testLWZX
   2573 # CHECK-ALL: name: testLWZX
   2574 alignment:       4
   2575 exposesReturnsTwice: false
   2576 legalized:       false
   2577 regBankSelected: false
   2578 selected:        false
   2579 tracksRegLiveness: true
   2580 registers:       
   2581   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2582   - { id: 1, class: g8rc, preferred-register: '' }
   2583   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2584   - { id: 3, class: gprc, preferred-register: '' }
   2585   - { id: 4, class: g8rc, preferred-register: '' }
   2586   - { id: 5, class: g8rc, preferred-register: '' }
   2587   - { id: 6, class: g8rc, preferred-register: '' }
   2588   - { id: 7, class: gprc, preferred-register: '' }
   2589   - { id: 8, class: gprc, preferred-register: '' }
   2590   - { id: 9, class: g8rc, preferred-register: '' }
   2591   - { id: 10, class: g8rc, preferred-register: '' }
   2592   - { id: 11, class: g8rc, preferred-register: '' }
   2593   - { id: 12, class: gprc, preferred-register: '' }
   2594   - { id: 13, class: gprc, preferred-register: '' }
   2595   - { id: 14, class: g8rc, preferred-register: '' }
   2596   - { id: 15, class: g8rc, preferred-register: '' }
   2597   - { id: 16, class: g8rc, preferred-register: '' }
   2598 liveins:         
   2599   - { reg: '$x3', virtual-reg: '%0' }
   2600   - { reg: '$x4', virtual-reg: '%1' }
   2601 frameInfo:       
   2602   isFrameAddressTaken: false
   2603   isReturnAddressTaken: false
   2604   hasStackMap:     false
   2605   hasPatchPoint:   false
   2606   stackSize:       0
   2607   offsetAdjustment: 0
   2608   maxAlignment:    0
   2609   adjustsStack:    false
   2610   hasCalls:        false
   2611   stackProtector:  ''
   2612   maxCallFrameSize: 4294967295
   2613   hasOpaqueSPAdjustment: false
   2614   hasVAStart:      false
   2615   hasMustTailInVarArgFunc: false
   2616   savePoint:       ''
   2617   restorePoint:    ''
   2618 fixedStack:      
   2619 stack:           
   2620 constants:       
   2621 body:             |
   2622   bb.0.entry:
   2623     liveins: $x3, $x4
   2624   
   2625     %1 = COPY $x4
   2626     %0 = LI8 1000
   2627     %2 = COPY %1.sub_32
   2628     %3 = ADDI %2, 1
   2629     %5 = IMPLICIT_DEF
   2630     %4 = INSERT_SUBREG %5, killed %3, 1
   2631     %6 = RLDIC %4, 2, 30
   2632     %7 = LWZX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
   2633     ; CHECK: LWZ 1000, killed %6
   2634     ; CHECK-LATE: lwz 5, 1000(5)
   2635     %8 = ADDI %2, 2
   2636     %10 = IMPLICIT_DEF
   2637     %9 = INSERT_SUBREG %10, killed %8, 1
   2638     %11 = RLDIC %9, 2, 30
   2639     %12 = LWZX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
   2640     ; CHECK: LWZ 1000, killed %11
   2641     ; CHECK-LATE: lwz 3, 1000(4)
   2642     %13 = ADD4 killed %12, killed %7
   2643     %15 = IMPLICIT_DEF
   2644     %14 = INSERT_SUBREG %15, killed %13, 1
   2645     %16 = RLDICL killed %14, 0, 32
   2646     $x3 = COPY %16
   2647     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2648 
   2649 ...
   2650 ---
   2651 name:            testLWAX
   2652 # CHECK-ALL: name: testLWAX
   2653 alignment:       4
   2654 exposesReturnsTwice: false
   2655 legalized:       false
   2656 regBankSelected: false
   2657 selected:        false
   2658 tracksRegLiveness: true
   2659 registers:       
   2660   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2661   - { id: 1, class: g8rc, preferred-register: '' }
   2662   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2663   - { id: 3, class: gprc, preferred-register: '' }
   2664   - { id: 4, class: g8rc, preferred-register: '' }
   2665   - { id: 5, class: g8rc, preferred-register: '' }
   2666   - { id: 6, class: g8rc, preferred-register: '' }
   2667   - { id: 7, class: g8rc, preferred-register: '' }
   2668   - { id: 8, class: gprc, preferred-register: '' }
   2669   - { id: 9, class: g8rc, preferred-register: '' }
   2670   - { id: 10, class: g8rc, preferred-register: '' }
   2671   - { id: 11, class: g8rc, preferred-register: '' }
   2672   - { id: 12, class: g8rc, preferred-register: '' }
   2673   - { id: 13, class: g8rc, preferred-register: '' }
   2674 liveins:         
   2675   - { reg: '$x3', virtual-reg: '%0' }
   2676   - { reg: '$x4', virtual-reg: '%1' }
   2677 frameInfo:       
   2678   isFrameAddressTaken: false
   2679   isReturnAddressTaken: false
   2680   hasStackMap:     false
   2681   hasPatchPoint:   false
   2682   stackSize:       0
   2683   offsetAdjustment: 0
   2684   maxAlignment:    0
   2685   adjustsStack:    false
   2686   hasCalls:        false
   2687   stackProtector:  ''
   2688   maxCallFrameSize: 4294967295
   2689   hasOpaqueSPAdjustment: false
   2690   hasVAStart:      false
   2691   hasMustTailInVarArgFunc: false
   2692   savePoint:       ''
   2693   restorePoint:    ''
   2694 fixedStack:      
   2695 stack:           
   2696 constants:       
   2697 body:             |
   2698   bb.0.entry:
   2699     liveins: $x3, $x4
   2700   
   2701     %1 = COPY $x4
   2702     %0 = LI8 444
   2703     %2 = COPY %1.sub_32
   2704     %3 = ADDI %2, 1
   2705     %5 = IMPLICIT_DEF
   2706     %4 = INSERT_SUBREG %5, killed %3, 1
   2707     %6 = RLDIC %4, 2, 30
   2708     %7 = LWAX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
   2709     ; CHECK: LWA 444, killed %6
   2710     ; CHECK-LATE: lwa 5, 444(5)
   2711     %8 = ADDI %2, 2
   2712     %10 = IMPLICIT_DEF
   2713     %9 = INSERT_SUBREG %10, killed %8, 1
   2714     %11 = RLDIC %9, 2, 30
   2715     %12 = LWAX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
   2716     ; CHECK: LWA 444, killed %11
   2717     ; CHECK-LATE: lwa 3, 444(4)
   2718     %13 = ADD8 killed %12, killed %7
   2719     $x3 = COPY %13
   2720     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2721 
   2722 ...
   2723 ---
   2724 name:            testLDUX
   2725 # CHECK-ALL: name: testLDUX
   2726 alignment:       4
   2727 exposesReturnsTwice: false
   2728 legalized:       false
   2729 regBankSelected: false
   2730 selected:        false
   2731 tracksRegLiveness: true
   2732 registers:       
   2733   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2734   - { id: 1, class: g8rc, preferred-register: '' }
   2735   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2736   - { id: 3, class: gprc, preferred-register: '' }
   2737   - { id: 4, class: g8rc, preferred-register: '' }
   2738   - { id: 5, class: g8rc, preferred-register: '' }
   2739   - { id: 6, class: g8rc, preferred-register: '' }
   2740   - { id: 7, class: g8rc, preferred-register: '' }
   2741   - { id: 8, class: gprc, preferred-register: '' }
   2742   - { id: 9, class: g8rc, preferred-register: '' }
   2743   - { id: 10, class: g8rc, preferred-register: '' }
   2744   - { id: 11, class: g8rc, preferred-register: '' }
   2745   - { id: 12, class: g8rc, preferred-register: '' }
   2746   - { id: 13, class: g8rc, preferred-register: '' }
   2747   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2748   - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2749 liveins:         
   2750   - { reg: '$x3', virtual-reg: '%0' }
   2751   - { reg: '$x4', virtual-reg: '%1' }
   2752 frameInfo:       
   2753   isFrameAddressTaken: false
   2754   isReturnAddressTaken: false
   2755   hasStackMap:     false
   2756   hasPatchPoint:   false
   2757   stackSize:       0
   2758   offsetAdjustment: 0
   2759   maxAlignment:    0
   2760   adjustsStack:    false
   2761   hasCalls:        false
   2762   stackProtector:  ''
   2763   maxCallFrameSize: 4294967295
   2764   hasOpaqueSPAdjustment: false
   2765   hasVAStart:      false
   2766   hasMustTailInVarArgFunc: false
   2767   savePoint:       ''
   2768   restorePoint:    ''
   2769 fixedStack:      
   2770 stack:           
   2771 constants:       
   2772 body:             |
   2773   bb.0.entry:
   2774     liveins: $x3, $x4
   2775   
   2776     %1 = COPY $x4
   2777     %0 = COPY $x3
   2778     %2 = COPY %1.sub_32
   2779     %3 = ADDI %2, 1
   2780     %5 = IMPLICIT_DEF
   2781     %4 = INSERT_SUBREG %5, killed %3, 1
   2782     %6 = LI8 100
   2783     %7,%14 = LDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
   2784     ; CHECK: LDU 100, %0
   2785     ; CHECK-LATE: ldu {{[0-9]+}}, 100({{[0-9]+}})
   2786     %8 = ADDI %2, 2
   2787     %10 = IMPLICIT_DEF
   2788     %9 = INSERT_SUBREG %10, killed %8, 1
   2789     %11 = LI8 200
   2790     %12,%15 = LDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
   2791     ; CHECK: LDU 200, %0
   2792     ; CHECK-LATE: ldu {{[0-9]+}}, 200({{[0-9]+}})
   2793     %13 = ADD8 killed %12, killed %7
   2794     $x3 = COPY %13
   2795     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2796 
   2797 ...
   2798 ---
   2799 name:            testLDX
   2800 # CHECK-ALL: name: testLDX
   2801 alignment:       4
   2802 exposesReturnsTwice: false
   2803 legalized:       false
   2804 regBankSelected: false
   2805 selected:        false
   2806 tracksRegLiveness: true
   2807 registers:       
   2808   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2809   - { id: 1, class: g8rc, preferred-register: '' }
   2810   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2811   - { id: 3, class: gprc, preferred-register: '' }
   2812   - { id: 4, class: g8rc, preferred-register: '' }
   2813   - { id: 5, class: g8rc, preferred-register: '' }
   2814   - { id: 6, class: g8rc, preferred-register: '' }
   2815   - { id: 7, class: g8rc, preferred-register: '' }
   2816   - { id: 8, class: gprc, preferred-register: '' }
   2817   - { id: 9, class: g8rc, preferred-register: '' }
   2818   - { id: 10, class: g8rc, preferred-register: '' }
   2819   - { id: 11, class: g8rc, preferred-register: '' }
   2820   - { id: 12, class: g8rc, preferred-register: '' }
   2821   - { id: 13, class: g8rc, preferred-register: '' }
   2822 liveins:         
   2823   - { reg: '$x3', virtual-reg: '%0' }
   2824   - { reg: '$x4', virtual-reg: '%1' }
   2825 frameInfo:       
   2826   isFrameAddressTaken: false
   2827   isReturnAddressTaken: false
   2828   hasStackMap:     false
   2829   hasPatchPoint:   false
   2830   stackSize:       0
   2831   offsetAdjustment: 0
   2832   maxAlignment:    0
   2833   adjustsStack:    false
   2834   hasCalls:        false
   2835   stackProtector:  ''
   2836   maxCallFrameSize: 4294967295
   2837   hasOpaqueSPAdjustment: false
   2838   hasVAStart:      false
   2839   hasMustTailInVarArgFunc: false
   2840   savePoint:       ''
   2841   restorePoint:    ''
   2842 fixedStack:      
   2843 stack:           
   2844 constants:       
   2845 body:             |
   2846   bb.0.entry:
   2847     liveins: $x3, $x4
   2848   
   2849     %1 = COPY $x4
   2850     %0 = COPY $x3
   2851     %2 = COPY %1.sub_32
   2852     %3 = ADDI %2, 1
   2853     %5 = IMPLICIT_DEF
   2854     %4 = INSERT_SUBREG %5, killed %3, 1
   2855     %6 = LI8 120
   2856     %7 = LDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
   2857     ; CHECK: LD 120, %0
   2858     ; CHECK-LATE: ld 4, 120(3)
   2859     %8 = ADDI %2, 2
   2860     %10 = IMPLICIT_DEF
   2861     %9 = INSERT_SUBREG %10, killed %8, 1
   2862     %11 = LI8 280
   2863     %12 = LDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
   2864     ; CHECK: LD 280, %0
   2865     ; CHECK-LATE: ld 3, 280(3)
   2866     %13 = ADD8 killed %12, killed %7
   2867     $x3 = COPY %13
   2868     BLR8 implicit $lr8, implicit $rm, implicit $x3
   2869 
   2870 ...
   2871 ---
   2872 name:            testLFDUX
   2873 # CHECK-ALL: name: testLFDUX
   2874 alignment:       4
   2875 exposesReturnsTwice: false
   2876 legalized:       false
   2877 regBankSelected: false
   2878 selected:        false
   2879 tracksRegLiveness: true
   2880 registers:       
   2881   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2882   - { id: 1, class: g8rc, preferred-register: '' }
   2883   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2884   - { id: 3, class: gprc, preferred-register: '' }
   2885   - { id: 4, class: g8rc, preferred-register: '' }
   2886   - { id: 5, class: g8rc, preferred-register: '' }
   2887   - { id: 6, class: g8rc, preferred-register: '' }
   2888   - { id: 7, class: f8rc, preferred-register: '' }
   2889   - { id: 8, class: gprc, preferred-register: '' }
   2890   - { id: 9, class: g8rc, preferred-register: '' }
   2891   - { id: 10, class: g8rc, preferred-register: '' }
   2892   - { id: 11, class: g8rc, preferred-register: '' }
   2893   - { id: 12, class: f8rc, preferred-register: '' }
   2894   - { id: 13, class: f8rc, preferred-register: '' }
   2895   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2896   - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2897 liveins:         
   2898   - { reg: '$x3', virtual-reg: '%0' }
   2899   - { reg: '$x4', virtual-reg: '%1' }
   2900 frameInfo:       
   2901   isFrameAddressTaken: false
   2902   isReturnAddressTaken: false
   2903   hasStackMap:     false
   2904   hasPatchPoint:   false
   2905   stackSize:       0
   2906   offsetAdjustment: 0
   2907   maxAlignment:    0
   2908   adjustsStack:    false
   2909   hasCalls:        false
   2910   stackProtector:  ''
   2911   maxCallFrameSize: 4294967295
   2912   hasOpaqueSPAdjustment: false
   2913   hasVAStart:      false
   2914   hasMustTailInVarArgFunc: false
   2915   savePoint:       ''
   2916   restorePoint:    ''
   2917 fixedStack:      
   2918 stack:           
   2919 constants:       
   2920 body:             |
   2921   bb.0.entry:
   2922     liveins: $x3, $x4
   2923   
   2924     %1 = COPY $x4
   2925     %0 = COPY $x3
   2926     %2 = COPY %1.sub_32
   2927     %3 = ADDI %2, 1
   2928     %5 = IMPLICIT_DEF
   2929     %4 = INSERT_SUBREG %5, killed %3, 1
   2930     %6 = LI8 440
   2931     %7,%14 = LFDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
   2932     ; CHECK: LFDU 440, %0
   2933     ; CHECK-LATE: lfdu {{[0-9]+}}, 440({{[0-9]+}})
   2934     %8 = ADDI %2, 2
   2935     %10 = IMPLICIT_DEF
   2936     %9 = INSERT_SUBREG %10, killed %8, 1
   2937     %11 = LI8 16
   2938     %12,%15 = LFDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
   2939     ; CHECK: LFDU 16, %0
   2940     ; CHECK-LATE: lfdu {{[0-9]+}}, 16({{[0-9]+}})
   2941     %13 = FADD killed %7, killed %12, implicit $rm
   2942     $f1 = COPY %13
   2943     BLR8 implicit $lr8, implicit $rm, implicit $f1
   2944 
   2945 ...
   2946 ---
   2947 name:            testLFDX
   2948 # CHECK-ALL: name: testLFDX
   2949 alignment:       4
   2950 exposesReturnsTwice: false
   2951 legalized:       false
   2952 regBankSelected: false
   2953 selected:        false
   2954 tracksRegLiveness: true
   2955 registers:       
   2956   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   2957   - { id: 1, class: g8rc, preferred-register: '' }
   2958   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   2959   - { id: 3, class: gprc, preferred-register: '' }
   2960   - { id: 4, class: g8rc, preferred-register: '' }
   2961   - { id: 5, class: g8rc, preferred-register: '' }
   2962   - { id: 6, class: g8rc, preferred-register: '' }
   2963   - { id: 7, class: f8rc, preferred-register: '' }
   2964   - { id: 8, class: gprc, preferred-register: '' }
   2965   - { id: 9, class: g8rc, preferred-register: '' }
   2966   - { id: 10, class: g8rc, preferred-register: '' }
   2967   - { id: 11, class: g8rc, preferred-register: '' }
   2968   - { id: 12, class: f8rc, preferred-register: '' }
   2969   - { id: 13, class: f8rc, preferred-register: '' }
   2970 liveins:         
   2971   - { reg: '$x3', virtual-reg: '%0' }
   2972   - { reg: '$x4', virtual-reg: '%1' }
   2973 frameInfo:       
   2974   isFrameAddressTaken: false
   2975   isReturnAddressTaken: false
   2976   hasStackMap:     false
   2977   hasPatchPoint:   false
   2978   stackSize:       0
   2979   offsetAdjustment: 0
   2980   maxAlignment:    0
   2981   adjustsStack:    false
   2982   hasCalls:        false
   2983   stackProtector:  ''
   2984   maxCallFrameSize: 4294967295
   2985   hasOpaqueSPAdjustment: false
   2986   hasVAStart:      false
   2987   hasMustTailInVarArgFunc: false
   2988   savePoint:       ''
   2989   restorePoint:    ''
   2990 fixedStack:      
   2991 stack:           
   2992 constants:       
   2993 body:             |
   2994   bb.0.entry:
   2995     liveins: $x3, $x4
   2996   
   2997     %1 = COPY $x4
   2998     %0 = LI8 -20
   2999     %2 = COPY %1.sub_32
   3000     %3 = ADDI %2, 1
   3001     %5 = IMPLICIT_DEF
   3002     %4 = INSERT_SUBREG %5, killed %3, 1
   3003     %6 = RLDIC %4, 3, 29
   3004     %7 = LFDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
   3005     ; CHECK: LFD -20, killed %6
   3006     ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}})
   3007     %8 = ADDI %2, 2
   3008     %10 = IMPLICIT_DEF
   3009     %9 = INSERT_SUBREG %10, killed %8, 1
   3010     %11 = RLDIC %9, 3, 29
   3011     %12 = LFDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
   3012     ; CHECK: LFD -20, killed %11
   3013     ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}})
   3014     %13 = FADD killed %7, killed %12, implicit $rm
   3015     $f1 = COPY %13
   3016     BLR8 implicit $lr8, implicit $rm, implicit $f1
   3017 
   3018 ...
   3019 ---
   3020 name:            testLFSUX
   3021 # CHECK-ALL: name: testLFSUX
   3022 alignment:       4
   3023 exposesReturnsTwice: false
   3024 legalized:       false
   3025 regBankSelected: false
   3026 selected:        false
   3027 tracksRegLiveness: true
   3028 registers:       
   3029   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3030   - { id: 1, class: g8rc, preferred-register: '' }
   3031   - { id: 2, class: g8rc, preferred-register: '' }
   3032   - { id: 3, class: f8rc, preferred-register: '' }
   3033   - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3034   - { id: 5, class: f8rc, preferred-register: '' }
   3035   - { id: 6, class: g8rc, preferred-register: '' }
   3036   - { id: 7, class: gprc, preferred-register: '' }
   3037   - { id: 8, class: f8rc, preferred-register: '' }
   3038   - { id: 9, class: f8rc, preferred-register: '' }
   3039   - { id: 10, class: f8rc, preferred-register: '' }
   3040   - { id: 11, class: g8rc, preferred-register: '' }
   3041   - { id: 12, class: gprc, preferred-register: '' }
   3042   - { id: 13, class: f8rc, preferred-register: '' }
   3043   - { id: 14, class: f8rc, preferred-register: '' }
   3044   - { id: 15, class: f8rc, preferred-register: '' }
   3045   - { id: 16, class: g8rc, preferred-register: '' }
   3046   - { id: 17, class: gprc, preferred-register: '' }
   3047   - { id: 18, class: f8rc, preferred-register: '' }
   3048   - { id: 19, class: f8rc, preferred-register: '' }
   3049   - { id: 20, class: f8rc, preferred-register: '' }
   3050   - { id: 21, class: g8rc, preferred-register: '' }
   3051   - { id: 22, class: gprc, preferred-register: '' }
   3052   - { id: 23, class: g8rc, preferred-register: '' }
   3053   - { id: 24, class: vrrc, preferred-register: '' }
   3054 liveins:         
   3055   - { reg: '$x3', virtual-reg: '%0' }
   3056   - { reg: '$x4', virtual-reg: '%1' }
   3057 frameInfo:       
   3058   isFrameAddressTaken: false
   3059   isReturnAddressTaken: false
   3060   hasStackMap:     false
   3061   hasPatchPoint:   false
   3062   stackSize:       0
   3063   offsetAdjustment: 0
   3064   maxAlignment:    16
   3065   adjustsStack:    false
   3066   hasCalls:        false
   3067   stackProtector:  ''
   3068   maxCallFrameSize: 4294967295
   3069   hasOpaqueSPAdjustment: false
   3070   hasVAStart:      false
   3071   hasMustTailInVarArgFunc: false
   3072   savePoint:       ''
   3073   restorePoint:    ''
   3074 fixedStack:      
   3075 stack:           
   3076   - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16, 
   3077       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
   3078       local-offset: -16, debug-info-variable: '', debug-info-expression: '',
   3079       debug-info-location: '' }
   3080   - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4, 
   3081       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
   3082       local-offset: -20, debug-info-variable: '', debug-info-expression: '',
   3083       debug-info-location: '' }
   3084   - { id: 2, name: '', type: default, offset: 0, size: 4, alignment: 4, 
   3085       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
   3086       local-offset: -24, debug-info-variable: '', debug-info-expression: '',
   3087       debug-info-location: '' }
   3088   - { id: 3, name: '', type: default, offset: 0, size: 4, alignment: 4, 
   3089       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
   3090       local-offset: -28, debug-info-variable: '', debug-info-expression: '',
   3091       debug-info-location: '' }
   3092   - { id: 4, name: '', type: default, offset: 0, size: 4, alignment: 4, 
   3093       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
   3094       local-offset: -32, debug-info-variable: '', debug-info-expression: '',
   3095       debug-info-location: '' }
   3096 constants:       
   3097 body:             |
   3098   bb.0.entry:
   3099     liveins: $x3, $x4
   3100   
   3101     %1 = COPY $x4
   3102     %0 = COPY $x3
   3103     %2 = LI8 72
   3104     %3, %4 = LFSUX %0, killed %2 :: (load 4 from %ir.arrayidx, !tbaa !14)
   3105     ; CHECK: LFSU 72, %0
   3106     ; CHECK-LATE: lfsu 0, 72(3)
   3107     %5 = FCTIWUZ killed %3, implicit $rm
   3108     %6 = ADDI8 %stack.4, 0
   3109     STFIWX killed %5, $zero8, killed %6
   3110     %7 = LWZ 0, %stack.4 :: (load 4 from %stack.4)
   3111     %8 = LFS 4, %4 :: (load 4 from %ir.3, !tbaa !14)
   3112     %10 = FCTIWUZ %8, implicit $rm
   3113     %11 = ADDI8 %stack.1, 0
   3114     STFIWX killed %10, $zero8, killed %11
   3115     %12 = LWZ 0, %stack.1 :: (load 4 from %stack.1)
   3116     %13 = LFS 8, %4 :: (load 4 from %ir.5, !tbaa !14)
   3117     %15 = FCTIWUZ %13, implicit $rm
   3118     %16 = ADDI8 %stack.2, 0
   3119     STFIWX killed %15, $zero8, killed %16
   3120     %17 = LWZ 0, %stack.2 :: (load 4 from %stack.2)
   3121     %18 = LFS 12, %4 :: (load 4 from %ir.7, !tbaa !14)
   3122     %20 = FCTIWUZ %18, implicit $rm
   3123     %21 = ADDI8 %stack.3, 0
   3124     STFIWX killed %20, $zero8, killed %21
   3125     %22 = LWZ 0, %stack.3 :: (load 4 from %stack.3)
   3126     STW killed %7, 0, %stack.0 :: (store 4 into %stack.0, align 16)
   3127     STW killed %22, 12, %stack.0 :: (store 4 into %stack.0 + 12)
   3128     STW killed %17, 8, %stack.0 :: (store 4 into %stack.0 + 8, align 8)
   3129     STW killed %12, 4, %stack.0 :: (store 4 into %stack.0 + 4)
   3130     %23 = ADDI8 %stack.0, 0
   3131     %24 = LVX $zero8, killed %23 :: (load 16 from %stack.0)
   3132     $v2 = COPY %24
   3133     BLR8 implicit $lr8, implicit $rm, implicit $v2
   3134 
   3135 ...
   3136 ---
   3137 name:            testLFSX
   3138 # CHECK-ALL: name: testLFSX
   3139 alignment:       4
   3140 exposesReturnsTwice: false
   3141 legalized:       false
   3142 regBankSelected: false
   3143 selected:        false
   3144 tracksRegLiveness: true
   3145 registers:       
   3146   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3147   - { id: 1, class: g8rc, preferred-register: '' }
   3148   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   3149   - { id: 3, class: gprc, preferred-register: '' }
   3150   - { id: 4, class: g8rc, preferred-register: '' }
   3151   - { id: 5, class: g8rc, preferred-register: '' }
   3152   - { id: 6, class: g8rc, preferred-register: '' }
   3153   - { id: 7, class: f4rc, preferred-register: '' }
   3154   - { id: 8, class: gprc, preferred-register: '' }
   3155   - { id: 9, class: g8rc, preferred-register: '' }
   3156   - { id: 10, class: g8rc, preferred-register: '' }
   3157   - { id: 11, class: g8rc, preferred-register: '' }
   3158   - { id: 12, class: f4rc, preferred-register: '' }
   3159   - { id: 13, class: f4rc, preferred-register: '' }
   3160 liveins:         
   3161   - { reg: '$x3', virtual-reg: '%0' }
   3162   - { reg: '$x4', virtual-reg: '%1' }
   3163 frameInfo:       
   3164   isFrameAddressTaken: false
   3165   isReturnAddressTaken: false
   3166   hasStackMap:     false
   3167   hasPatchPoint:   false
   3168   stackSize:       0
   3169   offsetAdjustment: 0
   3170   maxAlignment:    0
   3171   adjustsStack:    false
   3172   hasCalls:        false
   3173   stackProtector:  ''
   3174   maxCallFrameSize: 4294967295
   3175   hasOpaqueSPAdjustment: false
   3176   hasVAStart:      false
   3177   hasMustTailInVarArgFunc: false
   3178   savePoint:       ''
   3179   restorePoint:    ''
   3180 fixedStack:      
   3181 stack:           
   3182 constants:       
   3183 body:             |
   3184   bb.0.entry:
   3185     liveins: $x3, $x4
   3186   
   3187     %1 = COPY $x4
   3188     %0 = COPY $x3
   3189     %2 = COPY %1.sub_32
   3190     %3 = ADDI %2, 1
   3191     %5 = IMPLICIT_DEF
   3192     %4 = INSERT_SUBREG %5, killed %3, 1
   3193     %6 = LI8 88
   3194     %7 = LFSX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
   3195     ; CHECK: LFS 88, %0
   3196     ; CHECK-LATE: lfs 0, 88(3)
   3197     %8 = ADDI %2, 2
   3198     %10 = IMPLICIT_DEF
   3199     %9 = INSERT_SUBREG %10, killed %8, 1
   3200     %11 = LI8 -88
   3201     %12 = LFSX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
   3202     ; CHECK: LFS -88, %0
   3203     ; CHECK-LATE: lfs 1, -88(3)
   3204     %13 = FADDS killed %7, killed %12, implicit $rm
   3205     $f1 = COPY %13
   3206     BLR8 implicit $lr8, implicit $rm, implicit $f1
   3207 
   3208 ...
   3209 ---
   3210 name:            testLXSDX
   3211 # CHECK-ALL: name: testLXSDX
   3212 alignment:       4
   3213 exposesReturnsTwice: false
   3214 legalized:       false
   3215 regBankSelected: false
   3216 selected:        false
   3217 tracksRegLiveness: true
   3218 registers:       
   3219   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3220   - { id: 1, class: g8rc, preferred-register: '' }
   3221   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   3222   - { id: 3, class: gprc, preferred-register: '' }
   3223   - { id: 4, class: g8rc, preferred-register: '' }
   3224   - { id: 5, class: g8rc, preferred-register: '' }
   3225   - { id: 6, class: g8rc, preferred-register: '' }
   3226   - { id: 7, class: vsfrc, preferred-register: '' }
   3227   - { id: 8, class: gprc, preferred-register: '' }
   3228   - { id: 9, class: g8rc, preferred-register: '' }
   3229   - { id: 10, class: g8rc, preferred-register: '' }
   3230   - { id: 11, class: g8rc, preferred-register: '' }
   3231   - { id: 12, class: vsfrc, preferred-register: '' }
   3232   - { id: 13, class: vsfrc, preferred-register: '' }
   3233 liveins:         
   3234   - { reg: '$x3', virtual-reg: '%0' }
   3235   - { reg: '$x4', virtual-reg: '%1' }
   3236 frameInfo:       
   3237   isFrameAddressTaken: false
   3238   isReturnAddressTaken: false
   3239   hasStackMap:     false
   3240   hasPatchPoint:   false
   3241   stackSize:       0
   3242   offsetAdjustment: 0
   3243   maxAlignment:    0
   3244   adjustsStack:    false
   3245   hasCalls:        false
   3246   stackProtector:  ''
   3247   maxCallFrameSize: 4294967295
   3248   hasOpaqueSPAdjustment: false
   3249   hasVAStart:      false
   3250   hasMustTailInVarArgFunc: false
   3251   savePoint:       ''
   3252   restorePoint:    ''
   3253 fixedStack:      
   3254 stack:           
   3255 constants:       
   3256 body:             |
   3257   bb.0.entry:
   3258     liveins: $x3, $x4
   3259   
   3260     %1 = COPY $x4
   3261     %0 = COPY $x3
   3262     %2 = COPY %1.sub_32
   3263     %3 = ADDI %2, 1
   3264     %5 = IMPLICIT_DEF
   3265     %4 = INSERT_SUBREG %5, killed %3, 1
   3266     %6 = LI8 100
   3267     %7 = LXSDX %0, killed %6, implicit $rm :: (load 8 from %ir.arrayidx, !tbaa !12)
   3268     ; CHECK: LXSD 100, %0
   3269     ; CHECK-LATE: lxsd 0, 100(3)
   3270     %8 = ADDI %2, 2
   3271     %10 = IMPLICIT_DEF
   3272     %9 = INSERT_SUBREG %10, killed %8, 1
   3273     %11 = LI8 -120
   3274     %12 = LXSDX %0, killed %11, implicit $rm :: (load 8 from %ir.arrayidx3, !tbaa !12)
   3275     ; CHECK: LXSD -120, %0
   3276     ; CHECK-LATE: lxsd 1, -120(3)
   3277     %13 = XSADDDP killed %7, killed %12, implicit $rm
   3278     $f1 = COPY %13
   3279     BLR8 implicit $lr8, implicit $rm, implicit $f1
   3280 
   3281 ...
   3282 ---
   3283 name:            testLXSSPX
   3284 # CHECK-ALL: name: testLXSSPX
   3285 alignment:       4
   3286 exposesReturnsTwice: false
   3287 legalized:       false
   3288 regBankSelected: false
   3289 selected:        false
   3290 tracksRegLiveness: true
   3291 registers:       
   3292   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3293   - { id: 1, class: g8rc, preferred-register: '' }
   3294   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   3295   - { id: 3, class: gprc, preferred-register: '' }
   3296   - { id: 4, class: g8rc, preferred-register: '' }
   3297   - { id: 5, class: g8rc, preferred-register: '' }
   3298   - { id: 6, class: g8rc, preferred-register: '' }
   3299   - { id: 7, class: vssrc, preferred-register: '' }
   3300   - { id: 8, class: gprc, preferred-register: '' }
   3301   - { id: 9, class: g8rc, preferred-register: '' }
   3302   - { id: 10, class: g8rc, preferred-register: '' }
   3303   - { id: 11, class: g8rc, preferred-register: '' }
   3304   - { id: 12, class: vssrc, preferred-register: '' }
   3305   - { id: 13, class: vssrc, preferred-register: '' }
   3306 liveins:         
   3307   - { reg: '$x3', virtual-reg: '%0' }
   3308   - { reg: '$x4', virtual-reg: '%1' }
   3309 frameInfo:       
   3310   isFrameAddressTaken: false
   3311   isReturnAddressTaken: false
   3312   hasStackMap:     false
   3313   hasPatchPoint:   false
   3314   stackSize:       0
   3315   offsetAdjustment: 0
   3316   maxAlignment:    0
   3317   adjustsStack:    false
   3318   hasCalls:        false
   3319   stackProtector:  ''
   3320   maxCallFrameSize: 4294967295
   3321   hasOpaqueSPAdjustment: false
   3322   hasVAStart:      false
   3323   hasMustTailInVarArgFunc: false
   3324   savePoint:       ''
   3325   restorePoint:    ''
   3326 fixedStack:      
   3327 stack:           
   3328 constants:       
   3329 body:             |
   3330   bb.0.entry:
   3331     liveins: $x3, $x4
   3332   
   3333     %1 = COPY $x4
   3334     %0 = COPY $x3
   3335     %2 = COPY %1.sub_32
   3336     %3 = ADDI %2, 1
   3337     %5 = IMPLICIT_DEF
   3338     %4 = INSERT_SUBREG %5, killed %3, 1
   3339     %6 = LI8 96
   3340     %7 = LXSSPX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
   3341     ; CHECK: LXSSP 96, %0
   3342     ; CHECK-LATE: lxssp 0, 96(3)
   3343     %8 = ADDI %2, 2
   3344     %10 = IMPLICIT_DEF
   3345     %9 = INSERT_SUBREG %10, killed %8, 1
   3346     %11 = LI8 -92
   3347     %12 = LXSSPX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
   3348     ; CHECK: LXSSP -92, %0
   3349     ; CHECK-LATE: lxssp 1, -92(3)
   3350     %13 = XSADDSP killed %7, killed %12
   3351     $f1 = COPY %13
   3352     BLR8 implicit $lr8, implicit $rm, implicit $f1
   3353 
   3354 ...
   3355 ---
   3356 name:            testLXVX
   3357 # CHECK-ALL: name: testLXVX
   3358 alignment:       4
   3359 exposesReturnsTwice: false
   3360 legalized:       false
   3361 regBankSelected: false
   3362 selected:        false
   3363 tracksRegLiveness: true
   3364 registers:       
   3365   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3366   - { id: 1, class: g8rc, preferred-register: '' }
   3367   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   3368   - { id: 3, class: gprc, preferred-register: '' }
   3369   - { id: 4, class: g8rc, preferred-register: '' }
   3370   - { id: 5, class: g8rc, preferred-register: '' }
   3371   - { id: 6, class: g8rc, preferred-register: '' }
   3372   - { id: 7, class: vrrc, preferred-register: '' }
   3373   - { id: 8, class: gprc, preferred-register: '' }
   3374   - { id: 9, class: g8rc, preferred-register: '' }
   3375   - { id: 10, class: g8rc, preferred-register: '' }
   3376   - { id: 11, class: g8rc, preferred-register: '' }
   3377   - { id: 12, class: vrrc, preferred-register: '' }
   3378   - { id: 13, class: vrrc, preferred-register: '' }
   3379 liveins:         
   3380   - { reg: '$x3', virtual-reg: '%0' }
   3381   - { reg: '$x4', virtual-reg: '%1' }
   3382 frameInfo:       
   3383   isFrameAddressTaken: false
   3384   isReturnAddressTaken: false
   3385   hasStackMap:     false
   3386   hasPatchPoint:   false
   3387   stackSize:       0
   3388   offsetAdjustment: 0
   3389   maxAlignment:    0
   3390   adjustsStack:    false
   3391   hasCalls:        false
   3392   stackProtector:  ''
   3393   maxCallFrameSize: 4294967295
   3394   hasOpaqueSPAdjustment: false
   3395   hasVAStart:      false
   3396   hasMustTailInVarArgFunc: false
   3397   savePoint:       ''
   3398   restorePoint:    ''
   3399 fixedStack:      
   3400 stack:           
   3401 constants:       
   3402 body:             |
   3403   bb.0.entry:
   3404     liveins: $x3, $x4
   3405   
   3406     %1 = COPY $x4
   3407     %0 = COPY $x3
   3408     %2 = COPY %1.sub_32
   3409     %3 = ADDI %2, 1
   3410     %5 = IMPLICIT_DEF
   3411     %4 = INSERT_SUBREG %5, killed %3, 1
   3412     %6 = LI8 32
   3413     %7 = LXVX %0, killed %6 :: (load 16 from %ir.arrayidx, !tbaa !3)
   3414     ; CHECK: LXV 32, %0
   3415     ; CHECK-LATE: lxv 34, 32(3)
   3416     %8 = ADDI %2, 2
   3417     %10 = IMPLICIT_DEF
   3418     %9 = INSERT_SUBREG %10, killed %8, 1
   3419     %11 = LI8 -16
   3420     %12 = LXVX %0, killed %11 :: (load 16 from %ir.arrayidx3, !tbaa !3)
   3421     ; CHECK: LXV -16, %0
   3422     ; CHECK-LATE: lxv 35, -16(3)
   3423     %13 = VADDUWM killed %12, killed %7
   3424     $v2 = COPY %13
   3425     BLR8 implicit $lr8, implicit $rm, implicit $v2
   3426 
   3427 ...
   3428 ---
   3429 name:            testOR
   3430 # CHECK-ALL: name: testOR
   3431 alignment:       4
   3432 exposesReturnsTwice: false
   3433 legalized:       false
   3434 regBankSelected: false
   3435 selected:        false
   3436 tracksRegLiveness: true
   3437 registers:       
   3438   - { id: 0, class: gprc, preferred-register: '' }
   3439   - { id: 1, class: g8rc, preferred-register: '' }
   3440   - { id: 2, class: gprc, preferred-register: '' }
   3441   - { id: 3, class: gprc, preferred-register: '' }
   3442 liveins:         
   3443   - { reg: '$x3', virtual-reg: '%0' }
   3444   - { reg: '$x4', virtual-reg: '%1' }
   3445 frameInfo:       
   3446   isFrameAddressTaken: false
   3447   isReturnAddressTaken: false
   3448   hasStackMap:     false
   3449   hasPatchPoint:   false
   3450   stackSize:       0
   3451   offsetAdjustment: 0
   3452   maxAlignment:    0
   3453   adjustsStack:    false
   3454   hasCalls:        false
   3455   stackProtector:  ''
   3456   maxCallFrameSize: 4294967295
   3457   hasOpaqueSPAdjustment: false
   3458   hasVAStart:      false
   3459   hasMustTailInVarArgFunc: false
   3460   savePoint:       ''
   3461   restorePoint:    ''
   3462 fixedStack:      
   3463 stack:           
   3464 constants:       
   3465 body:             |
   3466   bb.0.entry:
   3467     liveins: $x3, $x4
   3468   
   3469     %1 = COPY $x4
   3470     %0 = LI 99
   3471     %3 = COPY %1.sub_32
   3472     %2 = OR %0, %3
   3473     ; CHECK: ORI %3, 99
   3474     ; CHECK-LATE: ori 3, 4, 99
   3475     $x3 = EXTSW_32_64 %2
   3476     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3477 
   3478 ...
   3479 ---
   3480 name:            testOR8
   3481 # CHECK-ALL: name: testOR8
   3482 alignment:       4
   3483 exposesReturnsTwice: false
   3484 legalized:       false
   3485 regBankSelected: false
   3486 selected:        false
   3487 tracksRegLiveness: true
   3488 registers:       
   3489   - { id: 0, class: g8rc, preferred-register: '' }
   3490   - { id: 1, class: g8rc, preferred-register: '' }
   3491   - { id: 2, class: g8rc, preferred-register: '' }
   3492 liveins:         
   3493   - { reg: '$x3', virtual-reg: '%0' }
   3494   - { reg: '$x4', virtual-reg: '%1' }
   3495 frameInfo:       
   3496   isFrameAddressTaken: false
   3497   isReturnAddressTaken: false
   3498   hasStackMap:     false
   3499   hasPatchPoint:   false
   3500   stackSize:       0
   3501   offsetAdjustment: 0
   3502   maxAlignment:    0
   3503   adjustsStack:    false
   3504   hasCalls:        false
   3505   stackProtector:  ''
   3506   maxCallFrameSize: 4294967295
   3507   hasOpaqueSPAdjustment: false
   3508   hasVAStart:      false
   3509   hasMustTailInVarArgFunc: false
   3510   savePoint:       ''
   3511   restorePoint:    ''
   3512 fixedStack:      
   3513 stack:           
   3514 constants:       
   3515 body:             |
   3516   bb.0.entry:
   3517     liveins: $x3, $x4
   3518   
   3519     %1 = COPY $x4
   3520     %0 = LI8 777
   3521     %2 = OR8 %1, %0
   3522     ; CHECK: ORI8 %1, 777
   3523     ; CHECK-LATE: ori 3, 4, 777
   3524     $x3 = COPY %2
   3525     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3526 
   3527 ...
   3528 ---
   3529 name:            testORI
   3530 # CHECK-ALL: name: testORI
   3531 alignment:       4
   3532 exposesReturnsTwice: false
   3533 legalized:       false
   3534 regBankSelected: false
   3535 selected:        false
   3536 tracksRegLiveness: true
   3537 registers:       
   3538   - { id: 0, class: gprc, preferred-register: '' }
   3539   - { id: 1, class: gprc, preferred-register: '' }
   3540 liveins:         
   3541   - { reg: '$x3', virtual-reg: '%0' }
   3542 frameInfo:       
   3543   isFrameAddressTaken: false
   3544   isReturnAddressTaken: false
   3545   hasStackMap:     false
   3546   hasPatchPoint:   false
   3547   stackSize:       0
   3548   offsetAdjustment: 0
   3549   maxAlignment:    0
   3550   adjustsStack:    false
   3551   hasCalls:        false
   3552   stackProtector:  ''
   3553   maxCallFrameSize: 4294967295
   3554   hasOpaqueSPAdjustment: false
   3555   hasVAStart:      false
   3556   hasMustTailInVarArgFunc: false
   3557   savePoint:       ''
   3558   restorePoint:    ''
   3559 fixedStack:      
   3560 stack:           
   3561 constants:       
   3562 body:             |
   3563   bb.0.entry:
   3564     liveins: $x3
   3565   
   3566     %0 = LI 777
   3567     %1 = ORI %0, 88
   3568     ; CHECK: LI 857
   3569     ; CHECK-LATE: li 3, 857
   3570     $x3 = EXTSW_32_64 %1
   3571     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3572 
   3573 ...
   3574 ---
   3575 name:            testORI8
   3576 # CHECK-ALL: name: testORI8
   3577 alignment:       4
   3578 exposesReturnsTwice: false
   3579 legalized:       false
   3580 regBankSelected: false
   3581 selected:        false
   3582 tracksRegLiveness: true
   3583 registers:       
   3584   - { id: 0, class: g8rc, preferred-register: '' }
   3585   - { id: 1, class: g8rc, preferred-register: '' }
   3586 liveins:         
   3587   - { reg: '$x3', virtual-reg: '%0' }
   3588 frameInfo:       
   3589   isFrameAddressTaken: false
   3590   isReturnAddressTaken: false
   3591   hasStackMap:     false
   3592   hasPatchPoint:   false
   3593   stackSize:       0
   3594   offsetAdjustment: 0
   3595   maxAlignment:    0
   3596   adjustsStack:    false
   3597   hasCalls:        false
   3598   stackProtector:  ''
   3599   maxCallFrameSize: 4294967295
   3600   hasOpaqueSPAdjustment: false
   3601   hasVAStart:      false
   3602   hasMustTailInVarArgFunc: false
   3603   savePoint:       ''
   3604   restorePoint:    ''
   3605 fixedStack:      
   3606 stack:           
   3607 constants:       
   3608 body:             |
   3609   bb.0.entry:
   3610     liveins: $x3
   3611   
   3612     %0 = LI8 8721
   3613     %1 = ORI8 %0, 99
   3614     ; CHECK: LI8 8819
   3615     ; CHECK-LATE: li 3, 8819
   3616     $x3 = COPY %1
   3617     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3618 
   3619 ...
   3620 ---
   3621 name:            testRLDCL
   3622 # CHECK-ALL: name: testRLDCL
   3623 alignment:       4
   3624 exposesReturnsTwice: false
   3625 legalized:       false
   3626 regBankSelected: false
   3627 selected:        false
   3628 tracksRegLiveness: true
   3629 registers:       
   3630   - { id: 0, class: g8rc, preferred-register: '' }
   3631   - { id: 1, class: g8rc, preferred-register: '' }
   3632   - { id: 2, class: gprc, preferred-register: '' }
   3633   - { id: 3, class: gprc, preferred-register: '' }
   3634   - { id: 4, class: g8rc, preferred-register: '' }
   3635 liveins:         
   3636   - { reg: '$x3', virtual-reg: '%0' }
   3637   - { reg: '$x4', virtual-reg: '%1' }
   3638 frameInfo:       
   3639   isFrameAddressTaken: false
   3640   isReturnAddressTaken: false
   3641   hasStackMap:     false
   3642   hasPatchPoint:   false
   3643   stackSize:       0
   3644   offsetAdjustment: 0
   3645   maxAlignment:    0
   3646   adjustsStack:    false
   3647   hasCalls:        false
   3648   stackProtector:  ''
   3649   maxCallFrameSize: 4294967295
   3650   hasOpaqueSPAdjustment: false
   3651   hasVAStart:      false
   3652   hasMustTailInVarArgFunc: false
   3653   savePoint:       ''
   3654   restorePoint:    ''
   3655 fixedStack:      
   3656 stack:           
   3657 constants:       
   3658 body:             |
   3659   bb.0.entry:
   3660     liveins: $x3, $x4
   3661   
   3662     %1 = COPY $x4
   3663     %0 = COPY $x3
   3664     %2 = COPY %1.sub_32
   3665     %3 = LI 14
   3666     %4 = RLDCL %0, killed %3, 0
   3667     ; CHECK: RLDICL %0, 14, 0
   3668     ; CHECK-LATE: rotldi 3, 3, 14
   3669     $x3 = COPY %4
   3670     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3671 
   3672 ...
   3673 ---
   3674 name:            testRLDCLo
   3675 # CHECK-ALL: name: testRLDCLo
   3676 alignment:       4
   3677 exposesReturnsTwice: false
   3678 legalized:       false
   3679 regBankSelected: false
   3680 selected:        false
   3681 tracksRegLiveness: true
   3682 registers:       
   3683   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3684   - { id: 1, class: g8rc, preferred-register: '' }
   3685   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3686   - { id: 3, class: gprc, preferred-register: '' }
   3687   - { id: 4, class: g8rc, preferred-register: '' }
   3688   - { id: 5, class: crrc, preferred-register: '' }
   3689   - { id: 6, class: g8rc, preferred-register: '' }
   3690 liveins:         
   3691   - { reg: '$x3', virtual-reg: '%0' }
   3692   - { reg: '$x4', virtual-reg: '%1' }
   3693 frameInfo:       
   3694   isFrameAddressTaken: false
   3695   isReturnAddressTaken: false
   3696   hasStackMap:     false
   3697   hasPatchPoint:   false
   3698   stackSize:       0
   3699   offsetAdjustment: 0
   3700   maxAlignment:    0
   3701   adjustsStack:    false
   3702   hasCalls:        false
   3703   stackProtector:  ''
   3704   maxCallFrameSize: 4294967295
   3705   hasOpaqueSPAdjustment: false
   3706   hasVAStart:      false
   3707   hasMustTailInVarArgFunc: false
   3708   savePoint:       ''
   3709   restorePoint:    ''
   3710 fixedStack:      
   3711 stack:           
   3712 constants:       
   3713 body:             |
   3714   bb.0.entry:
   3715     liveins: $x3, $x4
   3716   
   3717     %1 = COPY $x4
   3718     %0 = COPY $x3
   3719     %2 = RLDICL %1, 0, 58
   3720     %3 = LI 37
   3721     %4 = RLDCLo %0, killed %3, 0, implicit-def $cr0
   3722     ; CHECK: RLDICLo %0, 37, 0, implicit-def $cr0
   3723     ; CHECK-LATE: rldicl. 5, 3, 37, 0
   3724     %5 = COPY killed $cr0
   3725     %6 = ISEL8 %2, %0, %5.sub_eq
   3726     $x3 = COPY %6
   3727     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3728 
   3729 ...
   3730 ---
   3731 name:            testRLDCR
   3732 # CHECK-ALL: name: testRLDCR
   3733 alignment:       4
   3734 exposesReturnsTwice: false
   3735 legalized:       false
   3736 regBankSelected: false
   3737 selected:        false
   3738 tracksRegLiveness: true
   3739 registers:       
   3740   - { id: 0, class: g8rc, preferred-register: '' }
   3741   - { id: 1, class: g8rc, preferred-register: '' }
   3742   - { id: 2, class: gprc, preferred-register: '' }
   3743   - { id: 3, class: gprc, preferred-register: '' }
   3744   - { id: 4, class: g8rc, preferred-register: '' }
   3745 liveins:         
   3746   - { reg: '$x3', virtual-reg: '%0' }
   3747   - { reg: '$x4', virtual-reg: '%1' }
   3748 frameInfo:       
   3749   isFrameAddressTaken: false
   3750   isReturnAddressTaken: false
   3751   hasStackMap:     false
   3752   hasPatchPoint:   false
   3753   stackSize:       0
   3754   offsetAdjustment: 0
   3755   maxAlignment:    0
   3756   adjustsStack:    false
   3757   hasCalls:        false
   3758   stackProtector:  ''
   3759   maxCallFrameSize: 4294967295
   3760   hasOpaqueSPAdjustment: false
   3761   hasVAStart:      false
   3762   hasMustTailInVarArgFunc: false
   3763   savePoint:       ''
   3764   restorePoint:    ''
   3765 fixedStack:      
   3766 stack:           
   3767 constants:       
   3768 body:             |
   3769   bb.0.entry:
   3770     liveins: $x3, $x4
   3771   
   3772     %1 = COPY $x4
   3773     %0 = COPY $x3
   3774     %2 = COPY %1.sub_32
   3775     %3 = LI 0
   3776     %4 = RLDCR %0, killed %3, 0
   3777     ; CHECK: RLDICR %0, 0, 0
   3778     ; CHECK-LATE: rldicr 3, 3, 0, 0
   3779     $x3 = COPY %4
   3780     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3781 
   3782 ...
   3783 ---
   3784 name:            testRLDCRo
   3785 # CHECK-ALL: name: testRLDCRo
   3786 alignment:       4
   3787 exposesReturnsTwice: false
   3788 legalized:       false
   3789 regBankSelected: false
   3790 selected:        false
   3791 tracksRegLiveness: true
   3792 registers:       
   3793   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3794   - { id: 1, class: g8rc, preferred-register: '' }
   3795   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3796   - { id: 3, class: gprc, preferred-register: '' }
   3797   - { id: 4, class: g8rc, preferred-register: '' }
   3798   - { id: 5, class: crrc, preferred-register: '' }
   3799   - { id: 6, class: g8rc, preferred-register: '' }
   3800 liveins:         
   3801   - { reg: '$x3', virtual-reg: '%0' }
   3802   - { reg: '$x4', virtual-reg: '%1' }
   3803 frameInfo:       
   3804   isFrameAddressTaken: false
   3805   isReturnAddressTaken: false
   3806   hasStackMap:     false
   3807   hasPatchPoint:   false
   3808   stackSize:       0
   3809   offsetAdjustment: 0
   3810   maxAlignment:    0
   3811   adjustsStack:    false
   3812   hasCalls:        false
   3813   stackProtector:  ''
   3814   maxCallFrameSize: 4294967295
   3815   hasOpaqueSPAdjustment: false
   3816   hasVAStart:      false
   3817   hasMustTailInVarArgFunc: false
   3818   savePoint:       ''
   3819   restorePoint:    ''
   3820 fixedStack:      
   3821 stack:           
   3822 constants:       
   3823 body:             |
   3824   bb.0.entry:
   3825     liveins: $x3, $x4
   3826   
   3827     %1 = COPY $x4
   3828     %0 = COPY $x3
   3829     %2 = RLDICL %1, 0, 58
   3830     %3 = LI 18
   3831     %4 = RLDCRo %0, killed %3, 0, implicit-def $cr0
   3832     ; CHECK: RLDICRo %0, 18, 0, implicit-def $cr0
   3833     ; CHECK-LATE: rldicr. 5, 3, 18, 0
   3834     %5 = COPY killed $cr0
   3835     %6 = ISEL8 %2, %0, %5.sub_eq
   3836     $x3 = COPY %6
   3837     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3838 
   3839 ...
   3840 ---
   3841 name:            testRLDICL
   3842 # CHECK-ALL: name: testRLDICL
   3843 alignment:       4
   3844 exposesReturnsTwice: false
   3845 legalized:       false
   3846 regBankSelected: false
   3847 selected:        false
   3848 tracksRegLiveness: true
   3849 registers:       
   3850   - { id: 0, class: g8rc, preferred-register: '' }
   3851   - { id: 1, class: g8rc, preferred-register: '' }
   3852 liveins:         
   3853   - { reg: '$x3', virtual-reg: '%0' }
   3854 frameInfo:       
   3855   isFrameAddressTaken: false
   3856   isReturnAddressTaken: false
   3857   hasStackMap:     false
   3858   hasPatchPoint:   false
   3859   stackSize:       0
   3860   offsetAdjustment: 0
   3861   maxAlignment:    0
   3862   adjustsStack:    false
   3863   hasCalls:        false
   3864   stackProtector:  ''
   3865   maxCallFrameSize: 4294967295
   3866   hasOpaqueSPAdjustment: false
   3867   hasVAStart:      false
   3868   hasMustTailInVarArgFunc: false
   3869   savePoint:       ''
   3870   restorePoint:    ''
   3871 fixedStack:      
   3872 stack:           
   3873 constants:       
   3874 body:             |
   3875   bb.0.entry:
   3876     liveins: $x3
   3877   
   3878     %0 = LI8 -1
   3879     %1 = RLDICL %0, 53, 49
   3880     ; CHECK: LI8 32767
   3881     ; CHECK-LATE: li 3, 32767
   3882     $x3 = COPY %1
   3883     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3884 
   3885 ...
   3886 ---
   3887 name:            testRLDICLo
   3888 # CHECK-ALL: name: testRLDICLo
   3889 alignment:       4
   3890 exposesReturnsTwice: false
   3891 legalized:       false
   3892 regBankSelected: false
   3893 selected:        false
   3894 tracksRegLiveness: true
   3895 registers:       
   3896   - { id: 0, class: g8rc, preferred-register: '' }
   3897   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3898   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3899   - { id: 3, class: crrc, preferred-register: '' }
   3900   - { id: 4, class: g8rc, preferred-register: '' }
   3901 liveins:         
   3902   - { reg: '$x3', virtual-reg: '%0' }
   3903   - { reg: '$x4', virtual-reg: '%1' }
   3904 frameInfo:       
   3905   isFrameAddressTaken: false
   3906   isReturnAddressTaken: false
   3907   hasStackMap:     false
   3908   hasPatchPoint:   false
   3909   stackSize:       0
   3910   offsetAdjustment: 0
   3911   maxAlignment:    0
   3912   adjustsStack:    false
   3913   hasCalls:        false
   3914   stackProtector:  ''
   3915   maxCallFrameSize: 4294967295
   3916   hasOpaqueSPAdjustment: false
   3917   hasVAStart:      false
   3918   hasMustTailInVarArgFunc: false
   3919   savePoint:       ''
   3920   restorePoint:    ''
   3921 fixedStack:      
   3922 stack:           
   3923 constants:       
   3924 body:             |
   3925   bb.0.entry:
   3926     liveins: $x3, $x4
   3927   
   3928     %1 = COPY $x4
   3929     %0 = LI8 -1
   3930     %2 = RLDICLo %0, 53, 48, implicit-def $cr0
   3931     ; CHECK: ANDIo8 %0, 65535
   3932     ; CHECK-LATE: li 3, -1
   3933     ; CHECK-LATE: andi. 3, 3, 65535
   3934     %3 = COPY killed $cr0
   3935     %4 = ISEL8 %1, %2, %3.sub_eq
   3936     $x3 = COPY %4
   3937     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3938 
   3939 ...
   3940 ---
   3941 name:            testRLDICLo2
   3942 # CHECK-ALL: name: testRLDICLo2
   3943 alignment:       4
   3944 exposesReturnsTwice: false
   3945 legalized:       false
   3946 regBankSelected: false
   3947 selected:        false
   3948 tracksRegLiveness: true
   3949 registers:       
   3950   - { id: 0, class: g8rc, preferred-register: '' }
   3951   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3952   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   3953   - { id: 3, class: crrc, preferred-register: '' }
   3954   - { id: 4, class: g8rc, preferred-register: '' }
   3955 liveins:         
   3956   - { reg: '$x3', virtual-reg: '%0' }
   3957   - { reg: '$x4', virtual-reg: '%1' }
   3958 frameInfo:       
   3959   isFrameAddressTaken: false
   3960   isReturnAddressTaken: false
   3961   hasStackMap:     false
   3962   hasPatchPoint:   false
   3963   stackSize:       0
   3964   offsetAdjustment: 0
   3965   maxAlignment:    0
   3966   adjustsStack:    false
   3967   hasCalls:        false
   3968   stackProtector:  ''
   3969   maxCallFrameSize: 4294967295
   3970   hasOpaqueSPAdjustment: false
   3971   hasVAStart:      false
   3972   hasMustTailInVarArgFunc: false
   3973   savePoint:       ''
   3974   restorePoint:    ''
   3975 fixedStack:      
   3976 stack:           
   3977 constants:       
   3978 body:             |
   3979   bb.0.entry:
   3980     liveins: $x3, $x4
   3981   
   3982     %1 = COPY $x4
   3983     %0 = LI8 200
   3984     %2 = RLDICLo %0, 61, 3, implicit-def $cr0
   3985     ; CHECK: LI8 25
   3986     ; CHECK: ANDIo8 %0, 25
   3987     ; CHECK-LATE-NOT: andi.
   3988     %3 = COPY killed $cr0
   3989     %4 = ISEL8 %1, %2, %3.sub_eq
   3990     $x3 = COPY %4
   3991     BLR8 implicit $lr8, implicit $rm, implicit $x3
   3992 
   3993 ...
   3994 ---
   3995 name:            testRLDICLo3
   3996 # CHECK-ALL: name: testRLDICLo3
   3997 alignment:       4
   3998 exposesReturnsTwice: false
   3999 legalized:       false
   4000 regBankSelected: false
   4001 selected:        false
   4002 tracksRegLiveness: true
   4003 registers:       
   4004   - { id: 0, class: g8rc, preferred-register: '' }
   4005   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4006   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4007   - { id: 3, class: crrc, preferred-register: '' }
   4008   - { id: 4, class: g8rc, preferred-register: '' }
   4009 liveins:         
   4010   - { reg: '$x3', virtual-reg: '%0' }
   4011   - { reg: '$x4', virtual-reg: '%1' }
   4012 frameInfo:       
   4013   isFrameAddressTaken: false
   4014   isReturnAddressTaken: false
   4015   hasStackMap:     false
   4016   hasPatchPoint:   false
   4017   stackSize:       0
   4018   offsetAdjustment: 0
   4019   maxAlignment:    0
   4020   adjustsStack:    false
   4021   hasCalls:        false
   4022   stackProtector:  ''
   4023   maxCallFrameSize: 4294967295
   4024   hasOpaqueSPAdjustment: false
   4025   hasVAStart:      false
   4026   hasMustTailInVarArgFunc: false
   4027   savePoint:       ''
   4028   restorePoint:    ''
   4029 fixedStack:      
   4030 stack:           
   4031 constants:       
   4032 body:             |
   4033   bb.0.entry:
   4034     liveins: $x3, $x4
   4035   
   4036     %1 = COPY $x4
   4037     %0 = LI8 2
   4038     %2 = RLDICLo %0, 32, 32, implicit-def $cr0
   4039     ; CHECK: ANDIo8 %0, 0
   4040     ; CHECK-LATE: li 3, 2
   4041     ; CHECK-LATE: andi. 3, 3, 0
   4042     %3 = COPY killed $cr0
   4043     %4 = ISEL8 %1, %2, %3.sub_eq
   4044     $x3 = COPY %4
   4045     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4046 
   4047 ...
   4048 ---
   4049 name:            testRLWINM
   4050 # CHECK-ALL: name: testRLWINM
   4051 alignment:       4
   4052 exposesReturnsTwice: false
   4053 legalized:       false
   4054 regBankSelected: false
   4055 selected:        false
   4056 tracksRegLiveness: true
   4057 registers:       
   4058   - { id: 0, class: g8rc, preferred-register: '' }
   4059   - { id: 1, class: gprc, preferred-register: '' }
   4060   - { id: 2, class: gprc, preferred-register: '' }
   4061   - { id: 3, class: g8rc, preferred-register: '' }
   4062   - { id: 4, class: gprc, preferred-register: '' }
   4063 liveins:         
   4064   - { reg: '$x3', virtual-reg: '%0' }
   4065 frameInfo:       
   4066   isFrameAddressTaken: false
   4067   isReturnAddressTaken: false
   4068   hasStackMap:     false
   4069   hasPatchPoint:   false
   4070   stackSize:       0
   4071   offsetAdjustment: 0
   4072   maxAlignment:    0
   4073   adjustsStack:    false
   4074   hasCalls:        false
   4075   stackProtector:  ''
   4076   maxCallFrameSize: 4294967295
   4077   hasOpaqueSPAdjustment: false
   4078   hasVAStart:      false
   4079   hasMustTailInVarArgFunc: false
   4080   savePoint:       ''
   4081   restorePoint:    ''
   4082 fixedStack:      
   4083 stack:           
   4084 constants:       
   4085 body:             |
   4086   bb.0.entry:
   4087     liveins: $x3
   4088   
   4089     %0 = COPY $x3
   4090     %1 = COPY %0.sub_32
   4091     %3 = IMPLICIT_DEF
   4092     %2 = LI 17
   4093     %4 = RLWINM killed %2, 4, 20, 27
   4094     ; CHECK: LI 272
   4095     ; CHECK-LATE: li 3, 272
   4096     $x3 = EXTSW_32_64 %4
   4097     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4098 
   4099 ...
   4100 ---
   4101 name:            testRLWINMFullReg
   4102 # CHECK-ALL: name: testRLWINMFullReg
   4103 alignment:       4
   4104 exposesReturnsTwice: false
   4105 legalized:       false
   4106 regBankSelected: false
   4107 selected:        false
   4108 tracksRegLiveness: true
   4109 registers:       
   4110   - { id: 0, class: g8rc, preferred-register: '' }
   4111   - { id: 1, class: gprc, preferred-register: '' }
   4112   - { id: 2, class: gprc, preferred-register: '' }
   4113   - { id: 3, class: g8rc, preferred-register: '' }
   4114   - { id: 4, class: gprc, preferred-register: '' }
   4115 liveins:         
   4116   - { reg: '$x3', virtual-reg: '%0' }
   4117 frameInfo:       
   4118   isFrameAddressTaken: false
   4119   isReturnAddressTaken: false
   4120   hasStackMap:     false
   4121   hasPatchPoint:   false
   4122   stackSize:       0
   4123   offsetAdjustment: 0
   4124   maxAlignment:    0
   4125   adjustsStack:    false
   4126   hasCalls:        false
   4127   stackProtector:  ''
   4128   maxCallFrameSize: 4294967295
   4129   hasOpaqueSPAdjustment: false
   4130   hasVAStart:      false
   4131   hasMustTailInVarArgFunc: false
   4132   savePoint:       ''
   4133   restorePoint:    ''
   4134 fixedStack:      
   4135 stack:           
   4136 constants:       
   4137 body:             |
   4138   bb.0.entry:
   4139     liveins: $x3
   4140   
   4141     %0 = COPY $x3
   4142     %1 = COPY %0.sub_32
   4143     %3 = IMPLICIT_DEF
   4144     %2 = LI 2
   4145     %4 = RLWINM killed %2, 31, 0, 31
   4146     ; CHECK: LI 1
   4147     ; CHECK-LATE: li 3, 1
   4148     $x3 = EXTSW_32_64 %4
   4149     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4150 
   4151 ...
   4152 ---
   4153 name:            testRLWINMFullRegOutOfRange
   4154 # CHECK-ALL: name: testRLWINMFullRegOutOfRange
   4155 alignment:       4
   4156 exposesReturnsTwice: false
   4157 legalized:       false
   4158 regBankSelected: false
   4159 selected:        false
   4160 tracksRegLiveness: true
   4161 registers:       
   4162   - { id: 0, class: g8rc, preferred-register: '' }
   4163   - { id: 1, class: gprc, preferred-register: '' }
   4164   - { id: 2, class: gprc, preferred-register: '' }
   4165   - { id: 3, class: g8rc, preferred-register: '' }
   4166   - { id: 4, class: gprc, preferred-register: '' }
   4167 liveins:         
   4168   - { reg: '$x3', virtual-reg: '%0' }
   4169 frameInfo:       
   4170   isFrameAddressTaken: false
   4171   isReturnAddressTaken: false
   4172   hasStackMap:     false
   4173   hasPatchPoint:   false
   4174   stackSize:       0
   4175   offsetAdjustment: 0
   4176   maxAlignment:    0
   4177   adjustsStack:    false
   4178   hasCalls:        false
   4179   stackProtector:  ''
   4180   maxCallFrameSize: 4294967295
   4181   hasOpaqueSPAdjustment: false
   4182   hasVAStart:      false
   4183   hasMustTailInVarArgFunc: false
   4184   savePoint:       ''
   4185   restorePoint:    ''
   4186 fixedStack:      
   4187 stack:           
   4188 constants:       
   4189 body:             |
   4190   bb.0.entry:
   4191     liveins: $x3
   4192   
   4193     %0 = COPY $x3
   4194     %1 = COPY %0.sub_32
   4195     %3 = IMPLICIT_DEF
   4196     %2 = LI 1
   4197     %4 = RLWINM killed %2, 31, 0, 31
   4198     ; CHECK: RLWINM killed %2, 31, 0, 31
   4199     ; CHECK-LATE: rotlwi 3, 3, 31
   4200     $x3 = EXTSW_32_64 %4
   4201     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4202 
   4203 ...
   4204 ---
   4205 name:            testRLWINM8
   4206 # CHECK-ALL: name: testRLWINM8
   4207 alignment:       4
   4208 exposesReturnsTwice: false
   4209 legalized:       false
   4210 regBankSelected: false
   4211 selected:        false
   4212 tracksRegLiveness: true
   4213 registers:       
   4214   - { id: 0, class: g8rc, preferred-register: '' }
   4215   - { id: 1, class: g8rc, preferred-register: '' }
   4216 liveins:         
   4217   - { reg: '$x3', virtual-reg: '%0' }
   4218 frameInfo:       
   4219   isFrameAddressTaken: false
   4220   isReturnAddressTaken: false
   4221   hasStackMap:     false
   4222   hasPatchPoint:   false
   4223   stackSize:       0
   4224   offsetAdjustment: 0
   4225   maxAlignment:    0
   4226   adjustsStack:    false
   4227   hasCalls:        false
   4228   stackProtector:  ''
   4229   maxCallFrameSize: 4294967295
   4230   hasOpaqueSPAdjustment: false
   4231   hasVAStart:      false
   4232   hasMustTailInVarArgFunc: false
   4233   savePoint:       ''
   4234   restorePoint:    ''
   4235 fixedStack:      
   4236 stack:           
   4237 constants:       
   4238 body:             |
   4239   bb.0.entry:
   4240     liveins: $x3
   4241   
   4242     %0 = LI8 234
   4243     %1 = RLWINM8 %0, 4, 20, 27
   4244     ; CHECK: LI8 3744
   4245     ; CHECK-LATE: li 3, 3744
   4246     $x3 = COPY %1
   4247     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4248 
   4249 ...
   4250 ---
   4251 name:            testRLWINMo
   4252 # CHECK-ALL: name: testRLWINMo
   4253 alignment:       4
   4254 exposesReturnsTwice: false
   4255 legalized:       false
   4256 regBankSelected: false
   4257 selected:        false
   4258 tracksRegLiveness: true
   4259 registers:       
   4260   - { id: 0, class: g8rc, preferred-register: '' }
   4261   - { id: 1, class: g8rc, preferred-register: '' }
   4262   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   4263   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   4264   - { id: 4, class: gprc, preferred-register: '' }
   4265   - { id: 5, class: crrc, preferred-register: '' }
   4266   - { id: 6, class: gprc, preferred-register: '' }
   4267   - { id: 7, class: g8rc, preferred-register: '' }
   4268   - { id: 8, class: g8rc, preferred-register: '' }
   4269   - { id: 9, class: g8rc, preferred-register: '' }
   4270 liveins:         
   4271   - { reg: '$x3', virtual-reg: '%0' }
   4272   - { reg: '$x4', virtual-reg: '%1' }
   4273 frameInfo:       
   4274   isFrameAddressTaken: false
   4275   isReturnAddressTaken: false
   4276   hasStackMap:     false
   4277   hasPatchPoint:   false
   4278   stackSize:       0
   4279   offsetAdjustment: 0
   4280   maxAlignment:    0
   4281   adjustsStack:    false
   4282   hasCalls:        false
   4283   stackProtector:  ''
   4284   maxCallFrameSize: 4294967295
   4285   hasOpaqueSPAdjustment: false
   4286   hasVAStart:      false
   4287   hasMustTailInVarArgFunc: false
   4288   savePoint:       ''
   4289   restorePoint:    ''
   4290 fixedStack:      
   4291 stack:           
   4292 constants:       
   4293 body:             |
   4294   bb.0.entry:
   4295     liveins: $x3, $x4
   4296   
   4297     %1 = COPY $x4
   4298     %0 = COPY $x3
   4299     %2 = COPY %1.sub_32
   4300     %3 = LI -22
   4301     %4 = RLWINMo %3, 0, 24, 31, implicit-def $cr0
   4302     ; CHECK: LI -22
   4303     ; CHECK: ANDIo %3, 65514
   4304     ; CHECK-LATE: li 3, -22
   4305     ; CHECK-LATE: andi. 5, 3, 234
   4306     %5 = COPY killed $cr0
   4307     %6 = ISEL %2, %3, %5.sub_eq
   4308     %8 = IMPLICIT_DEF
   4309     %7 = INSERT_SUBREG %8, killed %6, 1
   4310     %9 = RLDICL killed %7, 0, 32
   4311     $x3 = COPY %9
   4312     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4313 
   4314 ...
   4315 ---
   4316 name:            testRLWINMo2
   4317 # CHECK-ALL: name: testRLWINMo2
   4318 alignment:       4
   4319 exposesReturnsTwice: false
   4320 legalized:       false
   4321 regBankSelected: false
   4322 selected:        false
   4323 tracksRegLiveness: true
   4324 registers:       
   4325   - { id: 0, class: g8rc, preferred-register: '' }
   4326   - { id: 1, class: g8rc, preferred-register: '' }
   4327   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   4328   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   4329   - { id: 4, class: gprc, preferred-register: '' }
   4330   - { id: 5, class: crrc, preferred-register: '' }
   4331   - { id: 6, class: gprc, preferred-register: '' }
   4332   - { id: 7, class: g8rc, preferred-register: '' }
   4333   - { id: 8, class: g8rc, preferred-register: '' }
   4334   - { id: 9, class: g8rc, preferred-register: '' }
   4335 liveins:         
   4336   - { reg: '$x3', virtual-reg: '%0' }
   4337   - { reg: '$x4', virtual-reg: '%1' }
   4338 frameInfo:       
   4339   isFrameAddressTaken: false
   4340   isReturnAddressTaken: false
   4341   hasStackMap:     false
   4342   hasPatchPoint:   false
   4343   stackSize:       0
   4344   offsetAdjustment: 0
   4345   maxAlignment:    0
   4346   adjustsStack:    false
   4347   hasCalls:        false
   4348   stackProtector:  ''
   4349   maxCallFrameSize: 4294967295
   4350   hasOpaqueSPAdjustment: false
   4351   hasVAStart:      false
   4352   hasMustTailInVarArgFunc: false
   4353   savePoint:       ''
   4354   restorePoint:    ''
   4355 fixedStack:      
   4356 stack:           
   4357 constants:       
   4358 body:             |
   4359   bb.0.entry:
   4360     liveins: $x3, $x4
   4361   
   4362     %1 = COPY $x4
   4363     %0 = COPY $x3
   4364     %2 = COPY %1.sub_32
   4365     %3 = LI -22
   4366     %4 = RLWINMo %3, 5, 24, 31, implicit-def $cr0
   4367     ; CHECK: LI -22
   4368     ; CHECK-NOT: ANDIo8 %3, 65514
   4369     ; CHECK-LATE-NOT: andi.
   4370     %5 = COPY killed $cr0
   4371     %6 = ISEL %2, %3, %5.sub_eq
   4372     %8 = IMPLICIT_DEF
   4373     %7 = INSERT_SUBREG %8, killed %6, 1
   4374     %9 = RLDICL killed %7, 0, 32
   4375     $x3 = COPY %9
   4376     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4377 
   4378 ...
   4379 ---
   4380 name:            testRLWINM8o
   4381 # CHECK-ALL: name: testRLWINM8o
   4382 alignment:       4
   4383 exposesReturnsTwice: false
   4384 legalized:       false
   4385 regBankSelected: false
   4386 selected:        false
   4387 tracksRegLiveness: true
   4388 registers:       
   4389   - { id: 0, class: g8rc, preferred-register: '' }
   4390   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4391   - { id: 2, class: g8rc, preferred-register: '' }
   4392   - { id: 3, class: g8rc, preferred-register: '' }
   4393   - { id: 4, class: g8rc, preferred-register: '' }
   4394   - { id: 5, class: g8rc, preferred-register: '' }
   4395   - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4396   - { id: 7, class: crrc, preferred-register: '' }
   4397   - { id: 8, class: g8rc, preferred-register: '' }
   4398 liveins:         
   4399   - { reg: '$x3', virtual-reg: '%0' }
   4400   - { reg: '$x4', virtual-reg: '%1' }
   4401 frameInfo:       
   4402   isFrameAddressTaken: false
   4403   isReturnAddressTaken: false
   4404   hasStackMap:     false
   4405   hasPatchPoint:   false
   4406   stackSize:       0
   4407   offsetAdjustment: 0
   4408   maxAlignment:    0
   4409   adjustsStack:    false
   4410   hasCalls:        false
   4411   stackProtector:  ''
   4412   maxCallFrameSize: 4294967295
   4413   hasOpaqueSPAdjustment: false
   4414   hasVAStart:      false
   4415   hasMustTailInVarArgFunc: false
   4416   savePoint:       ''
   4417   restorePoint:    ''
   4418 fixedStack:      
   4419 stack:           
   4420 constants:       
   4421 body:             |
   4422   bb.0.entry:
   4423     liveins: $x3, $x4
   4424   
   4425     %1 = COPY $x4
   4426     %0 = COPY $x3
   4427     %2 = LI8 -18
   4428     %3 = RLWINM8o %2, 4, 20, 27, implicit-def $cr0
   4429     ; CHECK: ANDIo8 %2, 3808
   4430     ; CHECK-LATE: li 3, -18
   4431     ; CHECK-LATE: andi. 3, 3, 3808
   4432     %7 = COPY killed $cr0
   4433     %6 = RLDICL killed %3, 0, 32
   4434     %8 = ISEL8 %1, %6, %7.sub_eq
   4435     $x3 = COPY %8
   4436     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4437 
   4438 ...
   4439 ---
   4440 name:            testSLD
   4441 # CHECK-ALL: name: testSLD
   4442 alignment:       4
   4443 exposesReturnsTwice: false
   4444 legalized:       false
   4445 regBankSelected: false
   4446 selected:        false
   4447 tracksRegLiveness: true
   4448 registers:       
   4449   - { id: 0, class: g8rc, preferred-register: '' }
   4450   - { id: 1, class: g8rc, preferred-register: '' }
   4451   - { id: 2, class: gprc, preferred-register: '' }
   4452   - { id: 3, class: g8rc, preferred-register: '' }
   4453 liveins:         
   4454   - { reg: '$x3', virtual-reg: '%0' }
   4455   - { reg: '$x4', virtual-reg: '%1' }
   4456 frameInfo:       
   4457   isFrameAddressTaken: false
   4458   isReturnAddressTaken: false
   4459   hasStackMap:     false
   4460   hasPatchPoint:   false
   4461   stackSize:       0
   4462   offsetAdjustment: 0
   4463   maxAlignment:    0
   4464   adjustsStack:    false
   4465   hasCalls:        false
   4466   stackProtector:  ''
   4467   maxCallFrameSize: 4294967295
   4468   hasOpaqueSPAdjustment: false
   4469   hasVAStart:      false
   4470   hasMustTailInVarArgFunc: false
   4471   savePoint:       ''
   4472   restorePoint:    ''
   4473 fixedStack:      
   4474 stack:           
   4475 constants:       
   4476 body:             |
   4477   bb.0.entry:
   4478     liveins: $x3, $x4
   4479   
   4480     %1 = COPY $x4
   4481     %0 = COPY $x3
   4482     %2 = LI 13
   4483     %3 = SLD %0, killed %2
   4484     ; CHECK: RLDICR %0, 13, 50
   4485     ; CHECK-LATE: sldi 3, 3, 13
   4486     $x3 = COPY %3
   4487     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4488 
   4489 ...
   4490 ---
   4491 name:            testSLDo
   4492 # CHECK-ALL: name: testSLDo
   4493 alignment:       4
   4494 exposesReturnsTwice: false
   4495 legalized:       false
   4496 regBankSelected: false
   4497 selected:        false
   4498 tracksRegLiveness: true
   4499 registers:       
   4500   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4501   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4502   - { id: 2, class: gprc, preferred-register: '' }
   4503   - { id: 3, class: g8rc, preferred-register: '' }
   4504   - { id: 4, class: crrc, preferred-register: '' }
   4505   - { id: 5, class: g8rc, preferred-register: '' }
   4506 liveins:         
   4507   - { reg: '$x3', virtual-reg: '%0' }
   4508   - { reg: '$x4', virtual-reg: '%1' }
   4509 frameInfo:       
   4510   isFrameAddressTaken: false
   4511   isReturnAddressTaken: false
   4512   hasStackMap:     false
   4513   hasPatchPoint:   false
   4514   stackSize:       0
   4515   offsetAdjustment: 0
   4516   maxAlignment:    0
   4517   adjustsStack:    false
   4518   hasCalls:        false
   4519   stackProtector:  ''
   4520   maxCallFrameSize: 4294967295
   4521   hasOpaqueSPAdjustment: false
   4522   hasVAStart:      false
   4523   hasMustTailInVarArgFunc: false
   4524   savePoint:       ''
   4525   restorePoint:    ''
   4526 fixedStack:      
   4527 stack:           
   4528 constants:       
   4529 body:             |
   4530   bb.0.entry:
   4531     liveins: $x3, $x4
   4532   
   4533     %1 = COPY $x4
   4534     %0 = COPY $x3
   4535     %2 = LI 17
   4536     %3 = SLDo %0, killed %2, implicit-def $cr0
   4537     ; CHECK: RLDICRo %0, 17, 46, implicit-def $cr0
   4538     ; CHECK-LATE: rldicr. 5, 3, 17, 46
   4539     %4 = COPY killed $cr0
   4540     %5 = ISEL8 %1, %0, %4.sub_eq
   4541     $x3 = COPY %5
   4542     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4543 
   4544 ...
   4545 ---
   4546 name:            testSRD
   4547 # CHECK-ALL: name: testSRD
   4548 alignment:       4
   4549 exposesReturnsTwice: false
   4550 legalized:       false
   4551 regBankSelected: false
   4552 selected:        false
   4553 tracksRegLiveness: true
   4554 registers:       
   4555   - { id: 0, class: g8rc, preferred-register: '' }
   4556   - { id: 1, class: g8rc, preferred-register: '' }
   4557   - { id: 2, class: gprc, preferred-register: '' }
   4558   - { id: 3, class: g8rc, preferred-register: '' }
   4559 liveins:         
   4560   - { reg: '$x3', virtual-reg: '%0' }
   4561   - { reg: '$x4', virtual-reg: '%1' }
   4562 frameInfo:       
   4563   isFrameAddressTaken: false
   4564   isReturnAddressTaken: false
   4565   hasStackMap:     false
   4566   hasPatchPoint:   false
   4567   stackSize:       0
   4568   offsetAdjustment: 0
   4569   maxAlignment:    0
   4570   adjustsStack:    false
   4571   hasCalls:        false
   4572   stackProtector:  ''
   4573   maxCallFrameSize: 4294967295
   4574   hasOpaqueSPAdjustment: false
   4575   hasVAStart:      false
   4576   hasMustTailInVarArgFunc: false
   4577   savePoint:       ''
   4578   restorePoint:    ''
   4579 fixedStack:      
   4580 stack:           
   4581 constants:       
   4582 body:             |
   4583   bb.0.entry:
   4584     liveins: $x3, $x4
   4585   
   4586     %1 = COPY $x4
   4587     %0 = COPY $x3
   4588     %2 = LI 4
   4589     %3 = SRD %0, killed %2
   4590     ; CHECK: RLDICL %0, 60, 4
   4591     ; CHECK-LATE: rldicl 3, 3, 60, 4
   4592     $x3 = COPY %3
   4593     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4594 
   4595 ...
   4596 ---
   4597 name:            testSRDo
   4598 # CHECK-ALL: name: testSRDo
   4599 alignment:       4
   4600 exposesReturnsTwice: false
   4601 legalized:       false
   4602 regBankSelected: false
   4603 selected:        false
   4604 tracksRegLiveness: true
   4605 registers:       
   4606   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4607   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   4608   - { id: 2, class: gprc, preferred-register: '' }
   4609   - { id: 3, class: g8rc, preferred-register: '' }
   4610   - { id: 4, class: crrc, preferred-register: '' }
   4611   - { id: 5, class: g8rc, preferred-register: '' }
   4612 liveins:         
   4613   - { reg: '$x3', virtual-reg: '%0' }
   4614   - { reg: '$x4', virtual-reg: '%1' }
   4615 frameInfo:       
   4616   isFrameAddressTaken: false
   4617   isReturnAddressTaken: false
   4618   hasStackMap:     false
   4619   hasPatchPoint:   false
   4620   stackSize:       0
   4621   offsetAdjustment: 0
   4622   maxAlignment:    0
   4623   adjustsStack:    false
   4624   hasCalls:        false
   4625   stackProtector:  ''
   4626   maxCallFrameSize: 4294967295
   4627   hasOpaqueSPAdjustment: false
   4628   hasVAStart:      false
   4629   hasMustTailInVarArgFunc: false
   4630   savePoint:       ''
   4631   restorePoint:    ''
   4632 fixedStack:      
   4633 stack:           
   4634 constants:       
   4635 body:             |
   4636   bb.0.entry:
   4637     liveins: $x3, $x4
   4638   
   4639     %1 = COPY $x4
   4640     %0 = COPY $x3
   4641     %2 = LI 17
   4642     %3 = SRDo %0, killed %2, implicit-def $cr0
   4643     ; CHECK: RLDICLo %0, 47, 17, implicit-def $cr0
   4644     ; CHECK-LATE: rldicl. 5, 3, 47, 17
   4645     %4 = COPY killed $cr0
   4646     %5 = ISEL8 %1, %0, %4.sub_eq
   4647     $x3 = COPY %5
   4648     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4649 
   4650 ...
   4651 ---
   4652 name:            testSLW
   4653 # CHECK-ALL: name: testSLW
   4654 alignment:       4
   4655 exposesReturnsTwice: false
   4656 legalized:       false
   4657 regBankSelected: false
   4658 selected:        false
   4659 tracksRegLiveness: true
   4660 registers:       
   4661   - { id: 0, class: g8rc, preferred-register: '' }
   4662   - { id: 1, class: g8rc, preferred-register: '' }
   4663   - { id: 2, class: gprc, preferred-register: '' }
   4664   - { id: 3, class: g8rc, preferred-register: '' }
   4665   - { id: 4, class: g8rc, preferred-register: '' }
   4666   - { id: 5, class: gprc, preferred-register: '' }
   4667   - { id: 6, class: g8rc, preferred-register: '' }
   4668   - { id: 7, class: g8rc, preferred-register: '' }
   4669   - { id: 8, class: gprc, preferred-register: '' }
   4670 liveins:         
   4671   - { reg: '$x3', virtual-reg: '%0' }
   4672   - { reg: '$x4', virtual-reg: '%1' }
   4673 frameInfo:       
   4674   isFrameAddressTaken: false
   4675   isReturnAddressTaken: false
   4676   hasStackMap:     false
   4677   hasPatchPoint:   false
   4678   stackSize:       0
   4679   offsetAdjustment: 0
   4680   maxAlignment:    0
   4681   adjustsStack:    false
   4682   hasCalls:        false
   4683   stackProtector:  ''
   4684   maxCallFrameSize: 4294967295
   4685   hasOpaqueSPAdjustment: false
   4686   hasVAStart:      false
   4687   hasMustTailInVarArgFunc: false
   4688   savePoint:       ''
   4689   restorePoint:    ''
   4690 fixedStack:      
   4691 stack:           
   4692 constants:       
   4693 body:             |
   4694   bb.0.entry:
   4695     liveins: $x3, $x4
   4696   
   4697     %1 = COPY $x4
   4698     %0 = COPY $x3
   4699     %2 = COPY %1.sub_32
   4700     %5 = LI 21
   4701     %8 = SLW killed %2, killed %5
   4702     ; CHECK: RLWINM killed %2, 21, 0, 10
   4703     ; CHECK-LATE: slwi 3, 4, 21
   4704     $x3 = EXTSW_32_64 %8
   4705     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4706 
   4707 ...
   4708 ---
   4709 name:            testSLWo
   4710 # CHECK-ALL: name: testSLWo
   4711 alignment:       4
   4712 exposesReturnsTwice: false
   4713 legalized:       false
   4714 regBankSelected: false
   4715 selected:        false
   4716 tracksRegLiveness: true
   4717 registers:       
   4718   - { id: 0, class: g8rc, preferred-register: '' }
   4719   - { id: 1, class: g8rc, preferred-register: '' }
   4720   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   4721   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   4722   - { id: 4, class: gprc, preferred-register: '' }
   4723   - { id: 5, class: crrc, preferred-register: '' }
   4724   - { id: 6, class: gprc, preferred-register: '' }
   4725   - { id: 7, class: g8rc, preferred-register: '' }
   4726   - { id: 8, class: g8rc, preferred-register: '' }
   4727   - { id: 9, class: g8rc, preferred-register: '' }
   4728 liveins:         
   4729   - { reg: '$x3', virtual-reg: '%0' }
   4730   - { reg: '$x4', virtual-reg: '%1' }
   4731 frameInfo:       
   4732   isFrameAddressTaken: false
   4733   isReturnAddressTaken: false
   4734   hasStackMap:     false
   4735   hasPatchPoint:   false
   4736   stackSize:       0
   4737   offsetAdjustment: 0
   4738   maxAlignment:    0
   4739   adjustsStack:    false
   4740   hasCalls:        false
   4741   stackProtector:  ''
   4742   maxCallFrameSize: 4294967295
   4743   hasOpaqueSPAdjustment: false
   4744   hasVAStart:      false
   4745   hasMustTailInVarArgFunc: false
   4746   savePoint:       ''
   4747   restorePoint:    ''
   4748 fixedStack:      
   4749 stack:           
   4750 constants:       
   4751 body:             |
   4752   bb.0.entry:
   4753     liveins: $x3, $x4
   4754   
   4755     %1 = COPY $x4
   4756     %0 = COPY $x3
   4757     %2 = LI 11
   4758     %3 = COPY %0.sub_32
   4759     %4 = SLWo %3, %2, implicit-def $cr0
   4760     ; CHECK: RLWINMo %3, 11, 0, 20, implicit-def $cr0
   4761     ; CHECK-LATE: rlwinm. 5, 3, 11, 0, 20
   4762     %5 = COPY killed $cr0
   4763     %6 = ISEL %2, %3, %5.sub_eq
   4764     %8 = IMPLICIT_DEF
   4765     %7 = INSERT_SUBREG %8, killed %6, 1
   4766     %9 = RLDICL killed %7, 0, 32
   4767     $x3 = COPY %9
   4768     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4769 
   4770 ...
   4771 ---
   4772 name:            testSRW
   4773 # CHECK-ALL: name: testSRW
   4774 alignment:       4
   4775 exposesReturnsTwice: false
   4776 legalized:       false
   4777 regBankSelected: false
   4778 selected:        false
   4779 tracksRegLiveness: true
   4780 registers:       
   4781   - { id: 0, class: g8rc, preferred-register: '' }
   4782   - { id: 1, class: g8rc, preferred-register: '' }
   4783   - { id: 2, class: gprc, preferred-register: '' }
   4784   - { id: 3, class: g8rc, preferred-register: '' }
   4785   - { id: 4, class: g8rc, preferred-register: '' }
   4786   - { id: 5, class: gprc, preferred-register: '' }
   4787   - { id: 6, class: g8rc, preferred-register: '' }
   4788   - { id: 7, class: g8rc, preferred-register: '' }
   4789   - { id: 8, class: gprc, preferred-register: '' }
   4790 liveins:         
   4791   - { reg: '$x3', virtual-reg: '%0' }
   4792   - { reg: '$x4', virtual-reg: '%1' }
   4793 frameInfo:       
   4794   isFrameAddressTaken: false
   4795   isReturnAddressTaken: false
   4796   hasStackMap:     false
   4797   hasPatchPoint:   false
   4798   stackSize:       0
   4799   offsetAdjustment: 0
   4800   maxAlignment:    0
   4801   adjustsStack:    false
   4802   hasCalls:        false
   4803   stackProtector:  ''
   4804   maxCallFrameSize: 4294967295
   4805   hasOpaqueSPAdjustment: false
   4806   hasVAStart:      false
   4807   hasMustTailInVarArgFunc: false
   4808   savePoint:       ''
   4809   restorePoint:    ''
   4810 fixedStack:      
   4811 stack:           
   4812 constants:       
   4813 body:             |
   4814   bb.0.entry:
   4815     liveins: $x3, $x4
   4816   
   4817     %1 = COPY $x4
   4818     %0 = COPY $x3
   4819     %2 = LI 8
   4820     %5 = COPY %0.sub_32
   4821     %8 = SRW killed %5, killed %2
   4822     ; CHECK: RLWINM killed %5, 24, 8, 31
   4823     ; CHECK-LATE: srwi 3, 3, 8
   4824     $x3 = EXTSW_32_64 %8
   4825     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4826 
   4827 ...
   4828 ---
   4829 name:            testSRWo
   4830 # CHECK-ALL: name: testSRWo
   4831 alignment:       4
   4832 exposesReturnsTwice: false
   4833 legalized:       false
   4834 regBankSelected: false
   4835 selected:        false
   4836 tracksRegLiveness: true
   4837 registers:       
   4838   - { id: 0, class: g8rc, preferred-register: '' }
   4839   - { id: 1, class: g8rc, preferred-register: '' }
   4840   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   4841   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   4842   - { id: 4, class: gprc, preferred-register: '' }
   4843   - { id: 5, class: crrc, preferred-register: '' }
   4844   - { id: 6, class: gprc, preferred-register: '' }
   4845   - { id: 7, class: g8rc, preferred-register: '' }
   4846   - { id: 8, class: g8rc, preferred-register: '' }
   4847   - { id: 9, class: g8rc, preferred-register: '' }
   4848 liveins:         
   4849   - { reg: '$x3', virtual-reg: '%0' }
   4850   - { reg: '$x4', virtual-reg: '%1' }
   4851 frameInfo:       
   4852   isFrameAddressTaken: false
   4853   isReturnAddressTaken: false
   4854   hasStackMap:     false
   4855   hasPatchPoint:   false
   4856   stackSize:       0
   4857   offsetAdjustment: 0
   4858   maxAlignment:    0
   4859   adjustsStack:    false
   4860   hasCalls:        false
   4861   stackProtector:  ''
   4862   maxCallFrameSize: 4294967295
   4863   hasOpaqueSPAdjustment: false
   4864   hasVAStart:      false
   4865   hasMustTailInVarArgFunc: false
   4866   savePoint:       ''
   4867   restorePoint:    ''
   4868 fixedStack:      
   4869 stack:           
   4870 constants:       
   4871 body:             |
   4872   bb.0.entry:
   4873     liveins: $x3, $x4
   4874   
   4875     %1 = COPY $x4
   4876     %0 = COPY $x3
   4877     %2 = LI 7
   4878     %3 = COPY %0.sub_32
   4879     %4 = SRWo %3, %2, implicit-def $cr0
   4880     ; CHECK: RLWINMo %3, 25, 7, 31
   4881     ; CHECK-LATE: rlwinm. 5, 3, 25, 7, 31
   4882     %5 = COPY killed $cr0
   4883     %6 = ISEL %2, %3, %5.sub_eq
   4884     %8 = IMPLICIT_DEF
   4885     %7 = INSERT_SUBREG %8, killed %6, 1
   4886     %9 = RLDICL killed %7, 0, 32
   4887     $x3 = COPY %9
   4888     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4889 
   4890 ...
   4891 ---
   4892 name:            testSRAW
   4893 # CHECK-ALL: name: testSRAW
   4894 alignment:       4
   4895 exposesReturnsTwice: false
   4896 legalized:       false
   4897 regBankSelected: false
   4898 selected:        false
   4899 tracksRegLiveness: true
   4900 registers:       
   4901   - { id: 0, class: g8rc, preferred-register: '' }
   4902   - { id: 1, class: g8rc, preferred-register: '' }
   4903   - { id: 2, class: gprc, preferred-register: '' }
   4904   - { id: 3, class: gprc, preferred-register: '' }
   4905   - { id: 4, class: gprc, preferred-register: '' }
   4906   - { id: 5, class: g8rc, preferred-register: '' }
   4907 liveins:         
   4908   - { reg: '$x3', virtual-reg: '%0' }
   4909   - { reg: '$x4', virtual-reg: '%1' }
   4910 frameInfo:       
   4911   isFrameAddressTaken: false
   4912   isReturnAddressTaken: false
   4913   hasStackMap:     false
   4914   hasPatchPoint:   false
   4915   stackSize:       0
   4916   offsetAdjustment: 0
   4917   maxAlignment:    0
   4918   adjustsStack:    false
   4919   hasCalls:        false
   4920   stackProtector:  ''
   4921   maxCallFrameSize: 4294967295
   4922   hasOpaqueSPAdjustment: false
   4923   hasVAStart:      false
   4924   hasMustTailInVarArgFunc: false
   4925   savePoint:       ''
   4926   restorePoint:    ''
   4927 fixedStack:      
   4928 stack:           
   4929 constants:       
   4930 body:             |
   4931   bb.0.entry:
   4932     liveins: $x3, $x4
   4933   
   4934     %1 = COPY $x4
   4935     %0 = COPY $x3
   4936     %2 = LI 15
   4937     %3 = COPY %0.sub_32
   4938     %4 = SRAW killed %3, killed %2, implicit-def dead $carry
   4939     ; CHECK: SRAWI killed %3, 15, implicit-def dead $carry
   4940     ; CHECK-LATE: srawi 3, 3, 15
   4941     %5 = EXTSW_32_64 killed %4
   4942     $x3 = COPY %5
   4943     BLR8 implicit $lr8, implicit $rm, implicit $x3
   4944 
   4945 ...
   4946 ---
   4947 name:            testSRAWo
   4948 # CHECK-ALL: name: testSRAWo
   4949 alignment:       4
   4950 exposesReturnsTwice: false
   4951 legalized:       false
   4952 regBankSelected: false
   4953 selected:        false
   4954 tracksRegLiveness: true
   4955 registers:       
   4956   - { id: 0, class: g8rc, preferred-register: '' }
   4957   - { id: 1, class: g8rc, preferred-register: '' }
   4958   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
   4959   - { id: 3, class: gprc, preferred-register: '' }
   4960   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   4961   - { id: 5, class: crrc, preferred-register: '' }
   4962   - { id: 6, class: gprc, preferred-register: '' }
   4963   - { id: 7, class: g8rc, preferred-register: '' }
   4964 liveins:         
   4965   - { reg: '$x3', virtual-reg: '%0' }
   4966   - { reg: '$x4', virtual-reg: '%1' }
   4967 frameInfo:       
   4968   isFrameAddressTaken: false
   4969   isReturnAddressTaken: false
   4970   hasStackMap:     false
   4971   hasPatchPoint:   false
   4972   stackSize:       0
   4973   offsetAdjustment: 0
   4974   maxAlignment:    0
   4975   adjustsStack:    false
   4976   hasCalls:        false
   4977   stackProtector:  ''
   4978   maxCallFrameSize: 4294967295
   4979   hasOpaqueSPAdjustment: false
   4980   hasVAStart:      false
   4981   hasMustTailInVarArgFunc: false
   4982   savePoint:       ''
   4983   restorePoint:    ''
   4984 fixedStack:      
   4985 stack:           
   4986 constants:       
   4987 body:             |
   4988   bb.0.entry:
   4989     liveins: $x3, $x4
   4990   
   4991     %1 = COPY $x4
   4992     %0 = COPY $x3
   4993     %2 = LI 8
   4994     %3 = COPY %0.sub_32
   4995     %4 = SRAWo killed %3, %2, implicit-def dead $carry, implicit-def $cr0
   4996     ; CHECK: SRAWIo killed %3, 8, implicit-def dead $carry, implicit-def $cr0
   4997     ; CHECK-LATE: srawi. 3, 3, 8
   4998     %5 = COPY killed $cr0
   4999     %6 = ISEL %2, %4, %5.sub_eq
   5000     %7 = EXTSW_32_64 killed %6
   5001     $x3 = COPY %7
   5002     BLR8 implicit $lr8, implicit $rm, implicit $x3
   5003 
   5004 ...
   5005 ---
   5006 name:            testSRAD
   5007 # CHECK-ALL: name: testSRAD
   5008 alignment:       4
   5009 exposesReturnsTwice: false
   5010 legalized:       false
   5011 regBankSelected: false
   5012 selected:        false
   5013 tracksRegLiveness: true
   5014 registers:       
   5015   - { id: 0, class: g8rc, preferred-register: '' }
   5016   - { id: 1, class: g8rc, preferred-register: '' }
   5017   - { id: 2, class: gprc, preferred-register: '' }
   5018   - { id: 3, class: g8rc, preferred-register: '' }
   5019 liveins:         
   5020   - { reg: '$x3', virtual-reg: '%0' }
   5021   - { reg: '$x4', virtual-reg: '%1' }
   5022 frameInfo:       
   5023   isFrameAddressTaken: false
   5024   isReturnAddressTaken: false
   5025   hasStackMap:     false
   5026   hasPatchPoint:   false
   5027   stackSize:       0
   5028   offsetAdjustment: 0
   5029   maxAlignment:    0
   5030   adjustsStack:    false
   5031   hasCalls:        false
   5032   stackProtector:  ''
   5033   maxCallFrameSize: 4294967295
   5034   hasOpaqueSPAdjustment: false
   5035   hasVAStart:      false
   5036   hasMustTailInVarArgFunc: false
   5037   savePoint:       ''
   5038   restorePoint:    ''
   5039 fixedStack:      
   5040 stack:           
   5041 constants:       
   5042 body:             |
   5043   bb.0.entry:
   5044     liveins: $x3, $x4
   5045   
   5046     %1 = COPY $x4
   5047     %0 = COPY $x3
   5048     %2 = LI 44
   5049     %3 = SRAD %0, killed %2, implicit-def dead $carry
   5050     ; CHECK: SRADI %0, 44, implicit-def dead $carry
   5051     ; CHECK-LATE: sradi 3, 3, 44
   5052     $x3 = COPY %3
   5053     BLR8 implicit $lr8, implicit $rm, implicit $x3
   5054 
   5055 ...
   5056 ---
   5057 name:            testSRADo
   5058 # CHECK-ALL: name: testSRADo
   5059 alignment:       4
   5060 exposesReturnsTwice: false
   5061 legalized:       false
   5062 regBankSelected: false
   5063 selected:        false
   5064 tracksRegLiveness: true
   5065 registers:       
   5066   - { id: 0, class: g8rc, preferred-register: '' }
   5067   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5068   - { id: 2, class: gprc, preferred-register: '' }
   5069   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5070   - { id: 4, class: crrc, preferred-register: '' }
   5071   - { id: 5, class: g8rc, preferred-register: '' }
   5072 liveins:         
   5073   - { reg: '$x3', virtual-reg: '%0' }
   5074   - { reg: '$x4', virtual-reg: '%1' }
   5075 frameInfo:       
   5076   isFrameAddressTaken: false
   5077   isReturnAddressTaken: false
   5078   hasStackMap:     false
   5079   hasPatchPoint:   false
   5080   stackSize:       0
   5081   offsetAdjustment: 0
   5082   maxAlignment:    0
   5083   adjustsStack:    false
   5084   hasCalls:        false
   5085   stackProtector:  ''
   5086   maxCallFrameSize: 4294967295
   5087   hasOpaqueSPAdjustment: false
   5088   hasVAStart:      false
   5089   hasMustTailInVarArgFunc: false
   5090   savePoint:       ''
   5091   restorePoint:    ''
   5092 fixedStack:      
   5093 stack:           
   5094 constants:       
   5095 body:             |
   5096   bb.0.entry:
   5097     liveins: $x3, $x4
   5098   
   5099     %1 = COPY $x4
   5100     %0 = COPY $x3
   5101     %2 = LI 61
   5102     %3 = SRADo %0, killed %2, implicit-def dead $carry, implicit-def $cr0
   5103     ; CHECK: SRADIo %0, 61, implicit-def dead $carry, implicit-def $cr0
   5104     ; CHECK-LATE: sradi. 3, 3, 61
   5105     %4 = COPY killed $cr0
   5106     %5 = ISEL8 %1, %3, %4.sub_eq
   5107     $x3 = COPY %5
   5108     BLR8 implicit $lr8, implicit $rm, implicit $x3
   5109 
   5110 ...
   5111 ---
   5112 name:            testSTBUX
   5113 # CHECK-ALL: name: testSTBUX
   5114 alignment:       4
   5115 exposesReturnsTwice: false
   5116 legalized:       false
   5117 regBankSelected: false
   5118 selected:        false
   5119 tracksRegLiveness: true
   5120 registers:       
   5121   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5122   - { id: 1, class: g8rc, preferred-register: '' }
   5123   - { id: 2, class: g8rc, preferred-register: '' }
   5124   - { id: 3, class: gprc, preferred-register: '' }
   5125   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   5126   - { id: 5, class: gprc, preferred-register: '' }
   5127   - { id: 6, class: g8rc, preferred-register: '' }
   5128   - { id: 7, class: g8rc, preferred-register: '' }
   5129   - { id: 8, class: g8rc, preferred-register: '' }
   5130   - { id: 9, class: gprc, preferred-register: '' }
   5131   - { id: 10, class: g8rc, preferred-register: '' }
   5132   - { id: 11, class: g8rc, preferred-register: '' }
   5133   - { id: 12, class: g8rc, preferred-register: '' }
   5134   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5135   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5136 liveins:         
   5137   - { reg: '$x3', virtual-reg: '%0' }
   5138   - { reg: '$x4', virtual-reg: '%1' }
   5139   - { reg: '$x5', virtual-reg: '%2' }
   5140 frameInfo:       
   5141   isFrameAddressTaken: false
   5142   isReturnAddressTaken: false
   5143   hasStackMap:     false
   5144   hasPatchPoint:   false
   5145   stackSize:       0
   5146   offsetAdjustment: 0
   5147   maxAlignment:    0
   5148   adjustsStack:    false
   5149   hasCalls:        false
   5150   stackProtector:  ''
   5151   maxCallFrameSize: 4294967295
   5152   hasOpaqueSPAdjustment: false
   5153   hasVAStart:      false
   5154   hasMustTailInVarArgFunc: false
   5155   savePoint:       ''
   5156   restorePoint:    ''
   5157 fixedStack:      
   5158 stack:           
   5159 constants:       
   5160 body:             |
   5161   bb.0.entry:
   5162     liveins: $x3, $x4, $x5
   5163   
   5164     %2 = COPY $x5
   5165     %1 = COPY $x4
   5166     %0 = COPY $x3
   5167     %3 = COPY %1.sub_32
   5168     %4 = COPY %2.sub_32
   5169     %5 = ADDI %4, 1
   5170     %7 = IMPLICIT_DEF
   5171     %6 = INSERT_SUBREG %7, killed %5, 1
   5172     %8 = LI8 966
   5173     %13 = STBUX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
   5174     ; CHECK: STBU %3, 966, %0
   5175     ; CHECK-LATE: {{[0-9]+}}, 966({{[0-9]+}})
   5176     %9 = ADDI %4, 2
   5177     %11 = IMPLICIT_DEF
   5178     %10 = INSERT_SUBREG %11, killed %9, 1
   5179     %12 = LI8 777
   5180     %14 = STBUX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
   5181     ; CHECK: STBU %3, 777, %0
   5182     ; CHECK-LATE: {{[0-9]+}}, 777({{[0-9]+}})
   5183     BLR8 implicit $lr8, implicit $rm
   5184 
   5185 ...
   5186 ---
   5187 name:            testSTBX
   5188 # CHECK-ALL: name: testSTBX
   5189 alignment:       4
   5190 exposesReturnsTwice: false
   5191 legalized:       false
   5192 regBankSelected: false
   5193 selected:        false
   5194 tracksRegLiveness: true
   5195 registers:       
   5196   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5197   - { id: 1, class: g8rc, preferred-register: '' }
   5198   - { id: 2, class: g8rc, preferred-register: '' }
   5199   - { id: 3, class: gprc, preferred-register: '' }
   5200   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   5201   - { id: 5, class: gprc, preferred-register: '' }
   5202   - { id: 6, class: g8rc, preferred-register: '' }
   5203   - { id: 7, class: g8rc, preferred-register: '' }
   5204   - { id: 8, class: g8rc, preferred-register: '' }
   5205   - { id: 9, class: gprc, preferred-register: '' }
   5206   - { id: 10, class: g8rc, preferred-register: '' }
   5207   - { id: 11, class: g8rc, preferred-register: '' }
   5208   - { id: 12, class: g8rc, preferred-register: '' }
   5209 liveins:         
   5210   - { reg: '$x3', virtual-reg: '%0' }
   5211   - { reg: '$x4', virtual-reg: '%1' }
   5212   - { reg: '$x5', virtual-reg: '%2' }
   5213 frameInfo:       
   5214   isFrameAddressTaken: false
   5215   isReturnAddressTaken: false
   5216   hasStackMap:     false
   5217   hasPatchPoint:   false
   5218   stackSize:       0
   5219   offsetAdjustment: 0
   5220   maxAlignment:    0
   5221   adjustsStack:    false
   5222   hasCalls:        false
   5223   stackProtector:  ''
   5224   maxCallFrameSize: 4294967295
   5225   hasOpaqueSPAdjustment: false
   5226   hasVAStart:      false
   5227   hasMustTailInVarArgFunc: false
   5228   savePoint:       ''
   5229   restorePoint:    ''
   5230 fixedStack:      
   5231 stack:           
   5232 constants:       
   5233 body:             |
   5234   bb.0.entry:
   5235     liveins: $x3, $x4, $x5
   5236   
   5237     %2 = COPY $x5
   5238     %1 = COPY $x4
   5239     %0 = LI8 975
   5240     %3 = COPY %1.sub_32
   5241     %4 = COPY %2.sub_32
   5242     %5 = ADDI %4, 1
   5243     %7 = IMPLICIT_DEF
   5244     %6 = INSERT_SUBREG %7, killed %5, 1
   5245     %8 = RLDICL killed %6, 0, 32
   5246     STBX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
   5247     ; CHECK: STB %3, 975, killed %8
   5248     ; CHECK-LATE: stb 4, 975(6)
   5249     %9 = ADDI %4, 2
   5250     %11 = IMPLICIT_DEF
   5251     %10 = INSERT_SUBREG %11, killed %9, 1
   5252     %12 = RLDICL killed %10, 0, 32
   5253     STBX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
   5254     ; CHECK: STB %3, 975, killed %12
   5255     ; CHECK-LATE: stb 4, 975(5)
   5256     BLR8 implicit $lr8, implicit $rm
   5257 
   5258 ...
   5259 ---
   5260 name:            testSTHUX
   5261 # CHECK-ALL: name: testSTHUX
   5262 alignment:       4
   5263 exposesReturnsTwice: false
   5264 legalized:       false
   5265 regBankSelected: false
   5266 selected:        false
   5267 tracksRegLiveness: true
   5268 registers:       
   5269   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5270   - { id: 1, class: g8rc, preferred-register: '' }
   5271   - { id: 2, class: g8rc, preferred-register: '' }
   5272   - { id: 3, class: gprc, preferred-register: '' }
   5273   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   5274   - { id: 5, class: gprc, preferred-register: '' }
   5275   - { id: 6, class: g8rc, preferred-register: '' }
   5276   - { id: 7, class: g8rc, preferred-register: '' }
   5277   - { id: 8, class: g8rc, preferred-register: '' }
   5278   - { id: 9, class: gprc, preferred-register: '' }
   5279   - { id: 10, class: g8rc, preferred-register: '' }
   5280   - { id: 11, class: g8rc, preferred-register: '' }
   5281   - { id: 12, class: g8rc, preferred-register: '' }
   5282   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5283   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5284 liveins:         
   5285   - { reg: '$x3', virtual-reg: '%0' }
   5286   - { reg: '$x4', virtual-reg: '%1' }
   5287   - { reg: '$x5', virtual-reg: '%2' }
   5288 frameInfo:       
   5289   isFrameAddressTaken: false
   5290   isReturnAddressTaken: false
   5291   hasStackMap:     false
   5292   hasPatchPoint:   false
   5293   stackSize:       0
   5294   offsetAdjustment: 0
   5295   maxAlignment:    0
   5296   adjustsStack:    false
   5297   hasCalls:        false
   5298   stackProtector:  ''
   5299   maxCallFrameSize: 4294967295
   5300   hasOpaqueSPAdjustment: false
   5301   hasVAStart:      false
   5302   hasMustTailInVarArgFunc: false
   5303   savePoint:       ''
   5304   restorePoint:    ''
   5305 fixedStack:      
   5306 stack:           
   5307 constants:       
   5308 body:             |
   5309   bb.0.entry:
   5310     liveins: $x3, $x4, $x5
   5311   
   5312     %2 = COPY $x5
   5313     %1 = COPY $x4
   5314     %0 = COPY $x3
   5315     %3 = COPY %1.sub_32
   5316     %4 = COPY %2.sub_32
   5317     %5 = ADDI %4, 1
   5318     %7 = IMPLICIT_DEF
   5319     %6 = INSERT_SUBREG %7, killed %5, 1
   5320     %8 = LI8 32000
   5321     %13 = STHUX %3, %0, killed %8 :: (store 2 into %ir.arrayidx, !tbaa !6)
   5322     ; CHECK: STHU %3, 32000, %0
   5323     ; CHECK-LATE: sthu {{[0-9]+}}, 32000({{[0-9]+}})
   5324     %9 = ADDI %4, 2
   5325     %11 = IMPLICIT_DEF
   5326     %10 = INSERT_SUBREG %11, killed %9, 1
   5327     %12 = LI8 -761
   5328     %14 = STHUX %3, %0, killed %12 :: (store 2 into %ir.arrayidx3, !tbaa !6)
   5329     ; CHECK: STHU %3, -761, %0
   5330     ; CHECK-LATE: sthu {{[0-9]+}}, -761({{[0-9]+}})
   5331     BLR8 implicit $lr8, implicit $rm
   5332 
   5333 ...
   5334 ---
   5335 name:            testSTHX
   5336 # CHECK-ALL: name: testSTHX
   5337 alignment:       4
   5338 exposesReturnsTwice: false
   5339 legalized:       false
   5340 regBankSelected: false
   5341 selected:        false
   5342 tracksRegLiveness: true
   5343 registers:       
   5344   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5345   - { id: 1, class: g8rc, preferred-register: '' }
   5346   - { id: 2, class: g8rc, preferred-register: '' }
   5347   - { id: 3, class: gprc, preferred-register: '' }
   5348   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   5349   - { id: 5, class: gprc, preferred-register: '' }
   5350   - { id: 6, class: g8rc, preferred-register: '' }
   5351   - { id: 7, class: g8rc, preferred-register: '' }
   5352   - { id: 8, class: g8rc, preferred-register: '' }
   5353   - { id: 9, class: gprc, preferred-register: '' }
   5354   - { id: 10, class: g8rc, preferred-register: '' }
   5355   - { id: 11, class: g8rc, preferred-register: '' }
   5356   - { id: 12, class: g8rc, preferred-register: '' }
   5357 liveins:         
   5358   - { reg: '$x3', virtual-reg: '%0' }
   5359   - { reg: '$x4', virtual-reg: '%1' }
   5360   - { reg: '$x5', virtual-reg: '%2' }
   5361 frameInfo:       
   5362   isFrameAddressTaken: false
   5363   isReturnAddressTaken: false
   5364   hasStackMap:     false
   5365   hasPatchPoint:   false
   5366   stackSize:       0
   5367   offsetAdjustment: 0
   5368   maxAlignment:    0
   5369   adjustsStack:    false
   5370   hasCalls:        false
   5371   stackProtector:  ''
   5372   maxCallFrameSize: 4294967295
   5373   hasOpaqueSPAdjustment: false
   5374   hasVAStart:      false
   5375   hasMustTailInVarArgFunc: false
   5376   savePoint:       ''
   5377   restorePoint:    ''
   5378 fixedStack:      
   5379 stack:           
   5380 constants:       
   5381 body:             |
   5382   bb.0.entry:
   5383     liveins: $x3, $x4, $x5
   5384   
   5385     %2 = COPY $x5
   5386     %1 = COPY $x4
   5387     %0 = COPY $x3
   5388     %3 = COPY %1.sub_32
   5389     %4 = COPY %2.sub_32
   5390     %5 = ADDI %4, 1
   5391     %7 = IMPLICIT_DEF
   5392     %6 = INSERT_SUBREG %7, killed %5, 1
   5393     %8 = LI8 900
   5394     STHX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
   5395     ; CHECK: STH %3, 900, %0
   5396     ; CHECK-LATE: sth {{[0-9]+}}, 900({{[0-9]+}})
   5397     %9 = ADDI %4, 2
   5398     %11 = IMPLICIT_DEF
   5399     %10 = INSERT_SUBREG %11, killed %9, 1
   5400     %12 = LI8 -900
   5401     STHX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
   5402     ; CHECK: STH %3, -900, %0
   5403     ; CHECK-LATE: sth {{[0-9]+}}, -900({{[0-9]+}})
   5404     BLR8 implicit $lr8, implicit $rm
   5405 
   5406 ...
   5407 ---
   5408 name:            testSTWUX
   5409 # CHECK-ALL: name: testSTWUX
   5410 alignment:       4
   5411 exposesReturnsTwice: false
   5412 legalized:       false
   5413 regBankSelected: false
   5414 selected:        false
   5415 tracksRegLiveness: true
   5416 registers:       
   5417   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5418   - { id: 1, class: g8rc, preferred-register: '' }
   5419   - { id: 2, class: g8rc, preferred-register: '' }
   5420   - { id: 3, class: gprc, preferred-register: '' }
   5421   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   5422   - { id: 5, class: gprc, preferred-register: '' }
   5423   - { id: 6, class: g8rc, preferred-register: '' }
   5424   - { id: 7, class: g8rc, preferred-register: '' }
   5425   - { id: 8, class: g8rc, preferred-register: '' }
   5426   - { id: 9, class: gprc, preferred-register: '' }
   5427   - { id: 10, class: g8rc, preferred-register: '' }
   5428   - { id: 11, class: g8rc, preferred-register: '' }
   5429   - { id: 12, class: g8rc, preferred-register: '' }
   5430   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5431   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5432 liveins:         
   5433   - { reg: '$x3', virtual-reg: '%0' }
   5434   - { reg: '$x4', virtual-reg: '%1' }
   5435   - { reg: '$x5', virtual-reg: '%2' }
   5436 frameInfo:       
   5437   isFrameAddressTaken: false
   5438   isReturnAddressTaken: false
   5439   hasStackMap:     false
   5440   hasPatchPoint:   false
   5441   stackSize:       0
   5442   offsetAdjustment: 0
   5443   maxAlignment:    0
   5444   adjustsStack:    false
   5445   hasCalls:        false
   5446   stackProtector:  ''
   5447   maxCallFrameSize: 4294967295
   5448   hasOpaqueSPAdjustment: false
   5449   hasVAStart:      false
   5450   hasMustTailInVarArgFunc: false
   5451   savePoint:       ''
   5452   restorePoint:    ''
   5453 fixedStack:      
   5454 stack:           
   5455 constants:       
   5456 body:             |
   5457   bb.0.entry:
   5458     liveins: $x3, $x4, $x5
   5459   
   5460     %2 = COPY $x5
   5461     %1 = COPY $x4
   5462     %0 = COPY $x3
   5463     %3 = COPY %1.sub_32
   5464     %4 = COPY %2.sub_32
   5465     %5 = ADDI %4, 1
   5466     %7 = IMPLICIT_DEF
   5467     %6 = INSERT_SUBREG %7, killed %5, 1
   5468     %8 = LI8 111
   5469     %13 = STWUX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
   5470     ; CHECK: STWU %3, 111, %0
   5471     ; CHECK-LATE: stwu {{[0-9]+}}, 111({{[0-9]+}})
   5472     %9 = ADDI %4, 2
   5473     %11 = IMPLICIT_DEF
   5474     %10 = INSERT_SUBREG %11, killed %9, 1
   5475     %12 = LI8 0
   5476     %14 = STWUX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
   5477     ; CHECK: STWU %3, 0, %0
   5478     ; CHECK-LATE: stwu {{[0-9]+}}, 0({{[0-9]+}})
   5479     BLR8 implicit $lr8, implicit $rm
   5480 
   5481 ...
   5482 ---
   5483 name:            testSTWX
   5484 # CHECK-ALL: name: testSTWX
   5485 alignment:       4
   5486 exposesReturnsTwice: false
   5487 legalized:       false
   5488 regBankSelected: false
   5489 selected:        false
   5490 tracksRegLiveness: true
   5491 registers:       
   5492   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5493   - { id: 1, class: g8rc, preferred-register: '' }
   5494   - { id: 2, class: g8rc, preferred-register: '' }
   5495   - { id: 3, class: gprc, preferred-register: '' }
   5496   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
   5497   - { id: 5, class: gprc, preferred-register: '' }
   5498   - { id: 6, class: g8rc, preferred-register: '' }
   5499   - { id: 7, class: g8rc, preferred-register: '' }
   5500   - { id: 8, class: g8rc, preferred-register: '' }
   5501   - { id: 9, class: gprc, preferred-register: '' }
   5502   - { id: 10, class: g8rc, preferred-register: '' }
   5503   - { id: 11, class: g8rc, preferred-register: '' }
   5504   - { id: 12, class: g8rc, preferred-register: '' }
   5505 liveins:         
   5506   - { reg: '$x3', virtual-reg: '%0' }
   5507   - { reg: '$x4', virtual-reg: '%1' }
   5508   - { reg: '$x5', virtual-reg: '%2' }
   5509 frameInfo:       
   5510   isFrameAddressTaken: false
   5511   isReturnAddressTaken: false
   5512   hasStackMap:     false
   5513   hasPatchPoint:   false
   5514   stackSize:       0
   5515   offsetAdjustment: 0
   5516   maxAlignment:    0
   5517   adjustsStack:    false
   5518   hasCalls:        false
   5519   stackProtector:  ''
   5520   maxCallFrameSize: 4294967295
   5521   hasOpaqueSPAdjustment: false
   5522   hasVAStart:      false
   5523   hasMustTailInVarArgFunc: false
   5524   savePoint:       ''
   5525   restorePoint:    ''
   5526 fixedStack:      
   5527 stack:           
   5528 constants:       
   5529 body:             |
   5530   bb.0.entry:
   5531     liveins: $x3, $x4, $x5
   5532   
   5533     %2 = COPY $x5
   5534     %1 = COPY $x4
   5535     %0 = COPY $x3
   5536     %3 = COPY %1.sub_32
   5537     %4 = COPY %2.sub_32
   5538     %5 = ADDI %4, 1
   5539     %7 = IMPLICIT_DEF
   5540     %6 = INSERT_SUBREG %7, killed %5, 1
   5541     %8 = LI8 2
   5542     STWX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
   5543     ; CHECK: STW %3, 2, %0
   5544     ; CHECK-LATE: stw 4, 2(3)
   5545     %9 = ADDI %4, 2
   5546     %11 = IMPLICIT_DEF
   5547     %10 = INSERT_SUBREG %11, killed %9, 1
   5548     %12 = LI8 99
   5549     STWX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
   5550     ; CHECK: STW %3, 99, %0
   5551     ; CHECK-LATE: stw 4, 99(3)
   5552     BLR8 implicit $lr8, implicit $rm
   5553 
   5554 ...
   5555 ---
   5556 name:            testSTDUX
   5557 # CHECK-ALL: name: testSTDUX
   5558 alignment:       4
   5559 exposesReturnsTwice: false
   5560 legalized:       false
   5561 regBankSelected: false
   5562 selected:        false
   5563 tracksRegLiveness: true
   5564 registers:       
   5565   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5566   - { id: 1, class: g8rc, preferred-register: '' }
   5567   - { id: 2, class: g8rc, preferred-register: '' }
   5568   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   5569   - { id: 4, class: gprc, preferred-register: '' }
   5570   - { id: 5, class: g8rc, preferred-register: '' }
   5571   - { id: 6, class: g8rc, preferred-register: '' }
   5572   - { id: 7, class: g8rc, preferred-register: '' }
   5573   - { id: 8, class: gprc, preferred-register: '' }
   5574   - { id: 9, class: g8rc, preferred-register: '' }
   5575   - { id: 10, class: g8rc, preferred-register: '' }
   5576   - { id: 11, class: g8rc, preferred-register: '' }
   5577   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5578   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5579 liveins:         
   5580   - { reg: '$x3', virtual-reg: '%0' }
   5581   - { reg: '$x4', virtual-reg: '%1' }
   5582   - { reg: '$x5', virtual-reg: '%2' }
   5583 frameInfo:       
   5584   isFrameAddressTaken: false
   5585   isReturnAddressTaken: false
   5586   hasStackMap:     false
   5587   hasPatchPoint:   false
   5588   stackSize:       0
   5589   offsetAdjustment: 0
   5590   maxAlignment:    0
   5591   adjustsStack:    false
   5592   hasCalls:        false
   5593   stackProtector:  ''
   5594   maxCallFrameSize: 4294967295
   5595   hasOpaqueSPAdjustment: false
   5596   hasVAStart:      false
   5597   hasMustTailInVarArgFunc: false
   5598   savePoint:       ''
   5599   restorePoint:    ''
   5600 fixedStack:      
   5601 stack:           
   5602 constants:       
   5603 body:             |
   5604   bb.0.entry:
   5605     liveins: $x3, $x4, $x5
   5606   
   5607     %2 = COPY $x5
   5608     %1 = COPY $x4
   5609     %0 = COPY $x3
   5610     %3 = COPY %2.sub_32
   5611     %4 = ADDI %3, 1
   5612     %6 = IMPLICIT_DEF
   5613     %5 = INSERT_SUBREG %6, killed %4, 1
   5614     %7 = LI8 444
   5615     %12 = STDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
   5616     ; CHECK: STDU %1, 444, %0
   5617     ; CHECK-LATE: stdu {{[0-9]+}}, 444({{[0-9]+}})
   5618     %8 = ADDI %3, 2
   5619     %10 = IMPLICIT_DEF
   5620     %9 = INSERT_SUBREG %10, killed %8, 1
   5621     %11 = LI8 -8
   5622     %13 = STDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
   5623     ; CHECK: STDU %1, -8, %0
   5624     ; CHECK-LATE: stdu {{[0-9]+}}, -8({{[0-9]+}})
   5625     BLR8 implicit $lr8, implicit $rm
   5626 
   5627 ...
   5628 ---
   5629 name:            testSTDX
   5630 # CHECK-ALL: name: testSTDX
   5631 alignment:       4
   5632 exposesReturnsTwice: false
   5633 legalized:       false
   5634 regBankSelected: false
   5635 selected:        false
   5636 tracksRegLiveness: true
   5637 registers:       
   5638   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5639   - { id: 1, class: g8rc, preferred-register: '' }
   5640   - { id: 2, class: g8rc, preferred-register: '' }
   5641   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   5642   - { id: 4, class: gprc, preferred-register: '' }
   5643   - { id: 5, class: g8rc, preferred-register: '' }
   5644   - { id: 6, class: g8rc, preferred-register: '' }
   5645   - { id: 7, class: g8rc, preferred-register: '' }
   5646   - { id: 8, class: gprc, preferred-register: '' }
   5647   - { id: 9, class: g8rc, preferred-register: '' }
   5648   - { id: 10, class: g8rc, preferred-register: '' }
   5649   - { id: 11, class: g8rc, preferred-register: '' }
   5650 liveins:         
   5651   - { reg: '$x3', virtual-reg: '%0' }
   5652   - { reg: '$x4', virtual-reg: '%1' }
   5653   - { reg: '$x5', virtual-reg: '%2' }
   5654 frameInfo:       
   5655   isFrameAddressTaken: false
   5656   isReturnAddressTaken: false
   5657   hasStackMap:     false
   5658   hasPatchPoint:   false
   5659   stackSize:       0
   5660   offsetAdjustment: 0
   5661   maxAlignment:    0
   5662   adjustsStack:    false
   5663   hasCalls:        false
   5664   stackProtector:  ''
   5665   maxCallFrameSize: 4294967295
   5666   hasOpaqueSPAdjustment: false
   5667   hasVAStart:      false
   5668   hasMustTailInVarArgFunc: false
   5669   savePoint:       ''
   5670   restorePoint:    ''
   5671 fixedStack:      
   5672 stack:           
   5673 constants:       
   5674 body:             |
   5675   bb.0.entry:
   5676     liveins: $x3, $x4, $x5
   5677   
   5678     %2 = COPY $x5
   5679     %1 = COPY $x4
   5680     %0 = LI8 1000
   5681     %3 = COPY %2.sub_32
   5682     %4 = ADDI %3, 1
   5683     %6 = IMPLICIT_DEF
   5684     %5 = INSERT_SUBREG %6, killed %4, 1
   5685     %7 = LI8 900
   5686     STDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
   5687     ; CHECK: STD %1, 1000, killed %7
   5688     ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}})
   5689     %8 = ADDI %3, 2
   5690     %10 = IMPLICIT_DEF
   5691     %9 = INSERT_SUBREG %10, killed %8, 1
   5692     %11 = LI8 -900
   5693     STDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
   5694     ; CHECK: STD %1, 1000, killed %11
   5695     ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}})
   5696     BLR8 implicit $lr8, implicit $rm
   5697 
   5698 ...
   5699 ---
   5700 name:            testSTFSX
   5701 # CHECK-ALL: name: testSTFSX
   5702 alignment:       4
   5703 exposesReturnsTwice: false
   5704 legalized:       false
   5705 regBankSelected: false
   5706 selected:        false
   5707 tracksRegLiveness: true
   5708 registers:       
   5709   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5710   - { id: 1, class: f4rc, preferred-register: '' }
   5711   - { id: 2, class: g8rc, preferred-register: '' }
   5712   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   5713   - { id: 4, class: gprc, preferred-register: '' }
   5714   - { id: 5, class: g8rc, preferred-register: '' }
   5715   - { id: 6, class: g8rc, preferred-register: '' }
   5716   - { id: 7, class: g8rc, preferred-register: '' }
   5717   - { id: 8, class: gprc, preferred-register: '' }
   5718   - { id: 9, class: g8rc, preferred-register: '' }
   5719   - { id: 10, class: g8rc, preferred-register: '' }
   5720   - { id: 11, class: g8rc, preferred-register: '' }
   5721 liveins:         
   5722   - { reg: '$x3', virtual-reg: '%0' }
   5723   - { reg: '$f1', virtual-reg: '%1' }
   5724   - { reg: '$x5', virtual-reg: '%2' }
   5725 frameInfo:       
   5726   isFrameAddressTaken: false
   5727   isReturnAddressTaken: false
   5728   hasStackMap:     false
   5729   hasPatchPoint:   false
   5730   stackSize:       0
   5731   offsetAdjustment: 0
   5732   maxAlignment:    0
   5733   adjustsStack:    false
   5734   hasCalls:        false
   5735   stackProtector:  ''
   5736   maxCallFrameSize: 4294967295
   5737   hasOpaqueSPAdjustment: false
   5738   hasVAStart:      false
   5739   hasMustTailInVarArgFunc: false
   5740   savePoint:       ''
   5741   restorePoint:    ''
   5742 fixedStack:      
   5743 stack:           
   5744 constants:       
   5745 body:             |
   5746   bb.0.entry:
   5747     liveins: $x3, $f1, $x5
   5748   
   5749     %2 = COPY $x5
   5750     %1 = COPY $f1
   5751     %0 = COPY $x3
   5752     %3 = COPY %2.sub_32
   5753     %4 = ADDI %3, 1
   5754     %6 = IMPLICIT_DEF
   5755     %5 = INSERT_SUBREG %6, killed %4, 1
   5756     %7 = LI8 400
   5757     STFSX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
   5758     ; CHECK: STFS %1, 400, %0
   5759     ; CHECK-LATE: stfs 1, 400(3)
   5760     %8 = ADDI %3, 2
   5761     %10 = IMPLICIT_DEF
   5762     %9 = INSERT_SUBREG %10, killed %8, 1
   5763     %11 = LI8 -401
   5764     STFSX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
   5765     ; CHECK: STFS %1, -401, %0
   5766     ; CHECK-LATE: stfs 1, -401(3)
   5767     BLR8 implicit $lr8, implicit $rm
   5768 
   5769 ...
   5770 ---
   5771 name:            testSTFSUX
   5772 # CHECK-ALL: name: testSTFSUX
   5773 alignment:       4
   5774 exposesReturnsTwice: false
   5775 legalized:       false
   5776 regBankSelected: false
   5777 selected:        false
   5778 tracksRegLiveness: true
   5779 registers:       
   5780   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5781   - { id: 1, class: f4rc, preferred-register: '' }
   5782   - { id: 2, class: g8rc, preferred-register: '' }
   5783   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   5784   - { id: 4, class: gprc, preferred-register: '' }
   5785   - { id: 5, class: g8rc, preferred-register: '' }
   5786   - { id: 6, class: g8rc, preferred-register: '' }
   5787   - { id: 7, class: g8rc, preferred-register: '' }
   5788   - { id: 8, class: gprc, preferred-register: '' }
   5789   - { id: 9, class: g8rc, preferred-register: '' }
   5790   - { id: 10, class: g8rc, preferred-register: '' }
   5791   - { id: 11, class: g8rc, preferred-register: '' }
   5792   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5793   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5794 liveins:         
   5795   - { reg: '$x3', virtual-reg: '%0' }
   5796   - { reg: '$f1', virtual-reg: '%1' }
   5797   - { reg: '$x5', virtual-reg: '%2' }
   5798 frameInfo:       
   5799   isFrameAddressTaken: false
   5800   isReturnAddressTaken: false
   5801   hasStackMap:     false
   5802   hasPatchPoint:   false
   5803   stackSize:       0
   5804   offsetAdjustment: 0
   5805   maxAlignment:    0
   5806   adjustsStack:    false
   5807   hasCalls:        false
   5808   stackProtector:  ''
   5809   maxCallFrameSize: 4294967295
   5810   hasOpaqueSPAdjustment: false
   5811   hasVAStart:      false
   5812   hasMustTailInVarArgFunc: false
   5813   savePoint:       ''
   5814   restorePoint:    ''
   5815 fixedStack:      
   5816 stack:           
   5817 constants:       
   5818 body:             |
   5819   bb.0.entry:
   5820     liveins: $x3, $f1, $x5
   5821   
   5822     %2 = COPY $x5
   5823     %1 = COPY $f1
   5824     %0 = COPY $x3
   5825     %3 = COPY %2.sub_32
   5826     %4 = ADDI %3, 1
   5827     %6 = IMPLICIT_DEF
   5828     %5 = INSERT_SUBREG %6, killed %4, 1
   5829     %7 = LI8 111
   5830     %12 = STFSUX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
   5831     ; CHECK: STFSU %1, 111, %0
   5832     ; CHECK-LATE: stfsu {{[0-9]+}}, 111({{[0-9]+}})
   5833     %8 = ADDI %3, 2
   5834     %10 = IMPLICIT_DEF
   5835     %9 = INSERT_SUBREG %10, killed %8, 1
   5836     %11 = LI8 987
   5837     %13 = STFSUX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
   5838     ; CHECK: STFSU %1, 987, %0
   5839     ; CHECK-LATE: stfsu {{[0-9]+}}, 987({{[0-9]+}})
   5840     BLR8 implicit $lr8, implicit $rm
   5841 
   5842 ...
   5843 ---
   5844 name:            testSTFDX
   5845 # CHECK-ALL: name: testSTFDX
   5846 alignment:       4
   5847 exposesReturnsTwice: false
   5848 legalized:       false
   5849 regBankSelected: false
   5850 selected:        false
   5851 tracksRegLiveness: true
   5852 registers:       
   5853   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5854   - { id: 1, class: f8rc, preferred-register: '' }
   5855   - { id: 2, class: g8rc, preferred-register: '' }
   5856   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   5857   - { id: 4, class: gprc, preferred-register: '' }
   5858   - { id: 5, class: g8rc, preferred-register: '' }
   5859   - { id: 6, class: g8rc, preferred-register: '' }
   5860   - { id: 7, class: g8rc, preferred-register: '' }
   5861   - { id: 8, class: gprc, preferred-register: '' }
   5862   - { id: 9, class: g8rc, preferred-register: '' }
   5863   - { id: 10, class: g8rc, preferred-register: '' }
   5864   - { id: 11, class: g8rc, preferred-register: '' }
   5865 liveins:         
   5866   - { reg: '$x3', virtual-reg: '%0' }
   5867   - { reg: '$f1', virtual-reg: '%1' }
   5868   - { reg: '$x5', virtual-reg: '%2' }
   5869 frameInfo:       
   5870   isFrameAddressTaken: false
   5871   isReturnAddressTaken: false
   5872   hasStackMap:     false
   5873   hasPatchPoint:   false
   5874   stackSize:       0
   5875   offsetAdjustment: 0
   5876   maxAlignment:    0
   5877   adjustsStack:    false
   5878   hasCalls:        false
   5879   stackProtector:  ''
   5880   maxCallFrameSize: 4294967295
   5881   hasOpaqueSPAdjustment: false
   5882   hasVAStart:      false
   5883   hasMustTailInVarArgFunc: false
   5884   savePoint:       ''
   5885   restorePoint:    ''
   5886 fixedStack:      
   5887 stack:           
   5888 constants:       
   5889 body:             |
   5890   bb.0.entry:
   5891     liveins: $x3, $f1, $x5
   5892   
   5893     %2 = COPY $x5
   5894     %1 = COPY $f1
   5895     %0 = COPY $x3
   5896     %3 = COPY %2.sub_32
   5897     %4 = ADDI %3, 1
   5898     %6 = IMPLICIT_DEF
   5899     %5 = INSERT_SUBREG %6, killed %4, 1
   5900     %7 = LI8 876
   5901     STFDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
   5902     ; CHECK: STFD %1, 876, %0
   5903     ; CHECK-LATE: stfd 1, 876(3)
   5904     %8 = ADDI %3, 2
   5905     %10 = IMPLICIT_DEF
   5906     %9 = INSERT_SUBREG %10, killed %8, 1
   5907     %11 = LI8 -873
   5908     STFDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
   5909     ; CHECK: STFD %1, -873, %0
   5910     ; CHECK-LATE: stfd 1, -873(3)
   5911     BLR8 implicit $lr8, implicit $rm
   5912 
   5913 ...
   5914 ---
   5915 name:            testSTFDUX
   5916 # CHECK-ALL: name: testSTFDUX
   5917 alignment:       4
   5918 exposesReturnsTwice: false
   5919 legalized:       false
   5920 regBankSelected: false
   5921 selected:        false
   5922 tracksRegLiveness: true
   5923 registers:       
   5924   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5925   - { id: 1, class: f8rc, preferred-register: '' }
   5926   - { id: 2, class: g8rc, preferred-register: '' }
   5927   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
   5928   - { id: 4, class: gprc, preferred-register: '' }
   5929   - { id: 5, class: g8rc, preferred-register: '' }
   5930   - { id: 6, class: g8rc, preferred-register: '' }
   5931   - { id: 7, class: g8rc, preferred-register: '' }
   5932   - { id: 8, class: gprc, preferred-register: '' }
   5933   - { id: 9, class: g8rc, preferred-register: '' }
   5934   - { id: 10, class: g8rc, preferred-register: '' }
   5935   - { id: 11, class: g8rc, preferred-register: '' }
   5936   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5937   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5938 liveins:         
   5939   - { reg: '$x3', virtual-reg: '%0' }
   5940   - { reg: '$f1', virtual-reg: '%1' }
   5941   - { reg: '$x5', virtual-reg: '%2' }
   5942 frameInfo:       
   5943   isFrameAddressTaken: false
   5944   isReturnAddressTaken: false
   5945   hasStackMap:     false
   5946   hasPatchPoint:   false
   5947   stackSize:       0
   5948   offsetAdjustment: 0
   5949   maxAlignment:    0
   5950   adjustsStack:    false
   5951   hasCalls:        false
   5952   stackProtector:  ''
   5953   maxCallFrameSize: 4294967295
   5954   hasOpaqueSPAdjustment: false
   5955   hasVAStart:      false
   5956   hasMustTailInVarArgFunc: false
   5957   savePoint:       ''
   5958   restorePoint:    ''
   5959 fixedStack:      
   5960 stack:           
   5961 constants:       
   5962 body:             |
   5963   bb.0.entry:
   5964     liveins: $x3, $f1, $x5
   5965   
   5966     %2 = COPY $x5
   5967     %1 = COPY $f1
   5968     %0 = COPY $x3
   5969     %3 = COPY %2.sub_32
   5970     %4 = ADDI %3, 1
   5971     %6 = IMPLICIT_DEF
   5972     %5 = INSERT_SUBREG %6, killed %4, 1
   5973     %7 = LI8 -9038
   5974     %12 = STFDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
   5975     ; CHECK: STFDU %1, -9038, %0
   5976     ; CHECK-LATE: stfdu {{[0-9]+}}, -9038({{[0-9]+}})
   5977     %8 = ADDI %3, 2
   5978     %10 = IMPLICIT_DEF
   5979     %9 = INSERT_SUBREG %10, killed %8, 1
   5980     %11 = LI8 6477
   5981     %13 = STFDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
   5982     ; CHECK: STFDU %1, 6477, %0
   5983     ; CHECK-LATE: stfdu {{[0-9]+}}, 6477({{[0-9]+}})
   5984     BLR8 implicit $lr8, implicit $rm
   5985 
   5986 ...
   5987 ---
   5988 name:            testSTXSSPX
   5989 # CHECK-ALL: name: testSTXSSPX
   5990 alignment:       4
   5991 exposesReturnsTwice: false
   5992 legalized:       false
   5993 regBankSelected: false
   5994 selected:        false
   5995 tracksRegLiveness: true
   5996 registers:       
   5997   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   5998   - { id: 1, class: vssrc, preferred-register: '' }
   5999   - { id: 2, class: g8rc, preferred-register: '' }
   6000   - { id: 3, class: g8rc, preferred-register: '' }
   6001 liveins:         
   6002   - { reg: '$x3', virtual-reg: '%0' }
   6003   - { reg: '$f1', virtual-reg: '%1' }
   6004   - { reg: '$x5', virtual-reg: '%2' }
   6005 frameInfo:       
   6006   isFrameAddressTaken: false
   6007   isReturnAddressTaken: false
   6008   hasStackMap:     false
   6009   hasPatchPoint:   false
   6010   stackSize:       0
   6011   offsetAdjustment: 0
   6012   maxAlignment:    0
   6013   adjustsStack:    false
   6014   hasCalls:        false
   6015   stackProtector:  ''
   6016   maxCallFrameSize: 4294967295
   6017   hasOpaqueSPAdjustment: false
   6018   hasVAStart:      false
   6019   hasMustTailInVarArgFunc: false
   6020   savePoint:       ''
   6021   restorePoint:    ''
   6022 fixedStack:      
   6023 stack:           
   6024 constants:       
   6025 body:             |
   6026   bb.0.entry:
   6027     liveins: $x3, $f1, $x5
   6028   
   6029     %2 = COPY $x5
   6030     %1 = COPY $f1
   6031     %0 = COPY $x3
   6032     %3 = LI8 444
   6033     STXSSPX %1, %0, killed %3 :: (store 4 into %ir.arrayidx, !tbaa !14)
   6034     ; CHECK: STXSSP %1, 444, %0
   6035     ; CHECK-LATE: stxssp 1, 444(3)
   6036     BLR8 implicit $lr8, implicit $rm
   6037 
   6038 ...
   6039 ---
   6040 name:            testSTXSDX
   6041 # CHECK-ALL: name: testSTXSDX
   6042 alignment:       4
   6043 exposesReturnsTwice: false
   6044 legalized:       false
   6045 regBankSelected: false
   6046 selected:        false
   6047 tracksRegLiveness: true
   6048 registers:       
   6049   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   6050   - { id: 1, class: vsfrc, preferred-register: '' }
   6051   - { id: 2, class: g8rc, preferred-register: '' }
   6052   - { id: 3, class: g8rc, preferred-register: '' }
   6053 liveins:         
   6054   - { reg: '$x3', virtual-reg: '%0' }
   6055   - { reg: '$f1', virtual-reg: '%1' }
   6056   - { reg: '$x5', virtual-reg: '%2' }
   6057 frameInfo:       
   6058   isFrameAddressTaken: false
   6059   isReturnAddressTaken: false
   6060   hasStackMap:     false
   6061   hasPatchPoint:   false
   6062   stackSize:       0
   6063   offsetAdjustment: 0
   6064   maxAlignment:    0
   6065   adjustsStack:    false
   6066   hasCalls:        false
   6067   stackProtector:  ''
   6068   maxCallFrameSize: 4294967295
   6069   hasOpaqueSPAdjustment: false
   6070   hasVAStart:      false
   6071   hasMustTailInVarArgFunc: false
   6072   savePoint:       ''
   6073   restorePoint:    ''
   6074 fixedStack:      
   6075 stack:           
   6076 constants:       
   6077 body:             |
   6078   bb.0.entry:
   6079     liveins: $x3, $f1, $x5
   6080   
   6081     %2 = COPY $x5
   6082     %1 = COPY $f1
   6083     %0 = COPY $x3
   6084     %3 = LI8 4
   6085     STXSDX %1, %0, killed %3, implicit $rm :: (store 8 into %ir.arrayidx, !tbaa !12)
   6086     ; CHECK: STXSD %1, 4, %0
   6087     ; CHECK-LATE: stxsd 1, 4(3)
   6088     BLR8 implicit $lr8, implicit $rm
   6089 
   6090 ...
   6091 ---
   6092 name:            testSTXVX
   6093 # CHECK-ALL: name: testSTXVX
   6094 alignment:       4
   6095 exposesReturnsTwice: false
   6096 legalized:       false
   6097 regBankSelected: false
   6098 selected:        false
   6099 tracksRegLiveness: true
   6100 registers:       
   6101   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
   6102   - { id: 1, class: vrrc, preferred-register: '' }
   6103   - { id: 2, class: g8rc, preferred-register: '' }
   6104   - { id: 3, class: g8rc, preferred-register: '' }
   6105 liveins:         
   6106   - { reg: '$x3', virtual-reg: '%0' }
   6107   - { reg: '$v2', virtual-reg: '%1' }
   6108   - { reg: '$x7', virtual-reg: '%2' }
   6109 frameInfo:       
   6110   isFrameAddressTaken: false
   6111   isReturnAddressTaken: false
   6112   hasStackMap:     false
   6113   hasPatchPoint:   false
   6114   stackSize:       0
   6115   offsetAdjustment: 0
   6116   maxAlignment:    0
   6117   adjustsStack:    false
   6118   hasCalls:        false
   6119   stackProtector:  ''
   6120   maxCallFrameSize: 4294967295
   6121   hasOpaqueSPAdjustment: false
   6122   hasVAStart:      false
   6123   hasMustTailInVarArgFunc: false
   6124   savePoint:       ''
   6125   restorePoint:    ''
   6126 fixedStack:      
   6127 stack:           
   6128 constants:       
   6129 body:             |
   6130   bb.0.entry:
   6131     liveins: $x3, $v2, $x7
   6132   
   6133     %2 = COPY $x7
   6134     %1 = COPY $v2
   6135     %0 = LI8 16
   6136     %3 = RLDICR %2, 4, 59
   6137     STXVX %1, %0, killed %3 :: (store 16 into %ir.arrayidx, !tbaa !3)
   6138     ; CHECK: STXV %1, 16, killed %3
   6139     ; CHECK-LATE: stxv 34, 16(4)
   6140     BLR8 implicit $lr8, implicit $rm
   6141 
   6142 ...
   6143 ---
   6144 name:            testSUBFC
   6145 # CHECK-ALL: name: testSUBFC
   6146 alignment:       4
   6147 exposesReturnsTwice: false
   6148 legalized:       false
   6149 regBankSelected: false
   6150 selected:        false
   6151 tracksRegLiveness: true
   6152 registers:       
   6153   - { id: 0, class: gprc, preferred-register: '' }
   6154   - { id: 1, class: g8rc, preferred-register: '' }
   6155   - { id: 2, class: g8rc, preferred-register: '' }
   6156   - { id: 3, class: g8rc, preferred-register: '' }
   6157   - { id: 4, class: gprc, preferred-register: '' }
   6158   - { id: 5, class: gprc, preferred-register: '' }
   6159   - { id: 6, class: gprc, preferred-register: '' }
   6160   - { id: 7, class: gprc, preferred-register: '' }
   6161   - { id: 8, class: gprc, preferred-register: '' }
   6162 liveins:         
   6163   - { reg: '$x3', virtual-reg: '%0' }
   6164   - { reg: '$x4', virtual-reg: '%1' }
   6165   - { reg: '$x5', virtual-reg: '%2' }
   6166   - { reg: '$x6', virtual-reg: '%3' }
   6167 frameInfo:       
   6168   isFrameAddressTaken: false
   6169   isReturnAddressTaken: false
   6170   hasStackMap:     false
   6171   hasPatchPoint:   false
   6172   stackSize:       0
   6173   offsetAdjustment: 0
   6174   maxAlignment:    0
   6175   adjustsStack:    false
   6176   hasCalls:        false
   6177   stackProtector:  ''
   6178   maxCallFrameSize: 4294967295
   6179   hasOpaqueSPAdjustment: false
   6180   hasVAStart:      false
   6181   hasMustTailInVarArgFunc: false
   6182   savePoint:       ''
   6183   restorePoint:    ''
   6184 fixedStack:      
   6185 stack:           
   6186 constants:       
   6187 body:             |
   6188   bb.0.entry:
   6189     liveins: $x3, $x4, $x5, $x6
   6190   
   6191     %3 = COPY $x6
   6192     %2 = COPY $x5
   6193     %1 = COPY $x4
   6194     %6 = COPY %3.sub_32
   6195     %7 = COPY %2.sub_32
   6196     %8 = COPY %1.sub_32
   6197     %0 = LI 55
   6198     %4 = SUBFC %7, %0, implicit-def $carry
   6199     ; CHECK: SUBFIC %7, 55
   6200     ; CHECK-LATE: subfic 3, 5, 55
   6201     %5 = SUBFE %6, %8, implicit-def dead $carry, implicit $carry
   6202     $x3 = EXTSW_32_64 %4
   6203     $x4 = EXTSW_32_64 %5
   6204     BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
   6205 
   6206 ...
   6207 ---
   6208 name:            testSUBFC8
   6209 # CHECK-ALL: name: testSUBFC8
   6210 alignment:       4
   6211 exposesReturnsTwice: false
   6212 legalized:       false
   6213 regBankSelected: false
   6214 selected:        false
   6215 tracksRegLiveness: true
   6216 registers:       
   6217   - { id: 0, class: g8rc, preferred-register: '' }
   6218   - { id: 1, class: g8rc, preferred-register: '' }
   6219   - { id: 2, class: g8rc, preferred-register: '' }
   6220   - { id: 3, class: g8rc, preferred-register: '' }
   6221   - { id: 4, class: g8rc, preferred-register: '' }
   6222   - { id: 5, class: g8rc, preferred-register: '' }
   6223 liveins:         
   6224   - { reg: '$x3', virtual-reg: '%0' }
   6225   - { reg: '$x4', virtual-reg: '%1' }
   6226   - { reg: '$x5', virtual-reg: '%2' }
   6227   - { reg: '$x6', virtual-reg: '%3' }
   6228 frameInfo:       
   6229   isFrameAddressTaken: false
   6230   isReturnAddressTaken: false
   6231   hasStackMap:     false
   6232   hasPatchPoint:   false
   6233   stackSize:       0
   6234   offsetAdjustment: 0
   6235   maxAlignment:    0
   6236   adjustsStack:    false
   6237   hasCalls:        false
   6238   stackProtector:  ''
   6239   maxCallFrameSize: 4294967295
   6240   hasOpaqueSPAdjustment: false
   6241   hasVAStart:      false
   6242   hasMustTailInVarArgFunc: false
   6243   savePoint:       ''
   6244   restorePoint:    ''
   6245 fixedStack:      
   6246 stack:           
   6247 constants:       
   6248 body:             |
   6249   bb.0.entry:
   6250     liveins: $x3, $x4, $x5, $x6
   6251   
   6252     %3 = COPY $x6
   6253     %2 = COPY $x5
   6254     %1 = COPY $x4
   6255     %0 = LI8 7635
   6256     %4 = SUBFC8 %2, %0, implicit-def $carry
   6257     ; CHECK: SUBFIC8 %2, 7635
   6258     ; CHECK-LATE: subfic 3, 5, 7635
   6259     %5 = SUBFE8 %3, %1, implicit-def dead $carry, implicit $carry
   6260     $x3 = COPY %4
   6261     $x4 = COPY %5
   6262     BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
   6263 
   6264 ...
   6265 ---
   6266 name:            testXOR
   6267 # CHECK-ALL: name: testXOR
   6268 alignment:       4
   6269 exposesReturnsTwice: false
   6270 legalized:       false
   6271 regBankSelected: false
   6272 selected:        false
   6273 tracksRegLiveness: true
   6274 registers:       
   6275   - { id: 0, class: g8rc, preferred-register: '' }
   6276   - { id: 1, class: gprc, preferred-register: '' }
   6277   - { id: 2, class: gprc, preferred-register: '' }
   6278   - { id: 3, class: gprc, preferred-register: '' }
   6279 liveins:         
   6280   - { reg: '$x3', virtual-reg: '%0' }
   6281   - { reg: '$x4', virtual-reg: '%1' }
   6282 frameInfo:       
   6283   isFrameAddressTaken: false
   6284   isReturnAddressTaken: false
   6285   hasStackMap:     false
   6286   hasPatchPoint:   false
   6287   stackSize:       0
   6288   offsetAdjustment: 0
   6289   maxAlignment:    0
   6290   adjustsStack:    false
   6291   hasCalls:        false
   6292   stackProtector:  ''
   6293   maxCallFrameSize: 4294967295
   6294   hasOpaqueSPAdjustment: false
   6295   hasVAStart:      false
   6296   hasMustTailInVarArgFunc: false
   6297   savePoint:       ''
   6298   restorePoint:    ''
   6299 fixedStack:      
   6300 stack:           
   6301 constants:       
   6302 body:             |
   6303   bb.0.entry:
   6304     liveins: $x3, $x4
   6305   
   6306     %1 = LI 10101
   6307     %0 = COPY $x3
   6308     %3 = COPY %0.sub_32
   6309     %2 = XOR %1, %3
   6310     ; CHECK: XORI %3, 10101
   6311     ; CHECK-LATE: 3, 3, 10101
   6312     $x3 = EXTSW_32_64 %2
   6313     BLR8 implicit $lr8, implicit $rm, implicit $x3
   6314 
   6315 ...
   6316 ---
   6317 name:            testXOR8
   6318 # CHECK-ALL: name: testXOR8
   6319 alignment:       4
   6320 exposesReturnsTwice: false
   6321 legalized:       false
   6322 regBankSelected: false
   6323 selected:        false
   6324 tracksRegLiveness: true
   6325 registers:       
   6326   - { id: 0, class: g8rc, preferred-register: '' }
   6327   - { id: 1, class: g8rc, preferred-register: '' }
   6328   - { id: 2, class: g8rc, preferred-register: '' }
   6329 liveins:         
   6330   - { reg: '$x3', virtual-reg: '%0' }
   6331   - { reg: '$x4', virtual-reg: '%1' }
   6332 frameInfo:       
   6333   isFrameAddressTaken: false
   6334   isReturnAddressTaken: false
   6335   hasStackMap:     false
   6336   hasPatchPoint:   false
   6337   stackSize:       0
   6338   offsetAdjustment: 0
   6339   maxAlignment:    0
   6340   adjustsStack:    false
   6341   hasCalls:        false
   6342   stackProtector:  ''
   6343   maxCallFrameSize: 4294967295
   6344   hasOpaqueSPAdjustment: false
   6345   hasVAStart:      false
   6346   hasMustTailInVarArgFunc: false
   6347   savePoint:       ''
   6348   restorePoint:    ''
   6349 fixedStack:      
   6350 stack:           
   6351 constants:       
   6352 body:             |
   6353   bb.0.entry:
   6354     liveins: $x3, $x4
   6355   
   6356     %1 = COPY $x4
   6357     %0 = LI8 5535
   6358     %2 = XOR8 %1, %0
   6359     ; CHECK: XORI8 %1, 5535
   6360     ; CHECK-LATE: xori 3, 4, 5535
   6361     $x3 = COPY %2
   6362     BLR8 implicit $lr8, implicit $rm, implicit $x3
   6363 
   6364 ...
   6365 ---
   6366 name:            testXORI
   6367 # CHECK-ALL: name: testXORI
   6368 alignment:       4
   6369 exposesReturnsTwice: false
   6370 legalized:       false
   6371 regBankSelected: false
   6372 selected:        false
   6373 tracksRegLiveness: true
   6374 registers:       
   6375   - { id: 0, class: gprc, preferred-register: '' }
   6376   - { id: 1, class: gprc, preferred-register: '' }
   6377 liveins:         
   6378   - { reg: '$x3', virtual-reg: '%0' }
   6379 frameInfo:       
   6380   isFrameAddressTaken: false
   6381   isReturnAddressTaken: false
   6382   hasStackMap:     false
   6383   hasPatchPoint:   false
   6384   stackSize:       0
   6385   offsetAdjustment: 0
   6386   maxAlignment:    0
   6387   adjustsStack:    false
   6388   hasCalls:        false
   6389   stackProtector:  ''
   6390   maxCallFrameSize: 4294967295
   6391   hasOpaqueSPAdjustment: false
   6392   hasVAStart:      false
   6393   hasMustTailInVarArgFunc: false
   6394   savePoint:       ''
   6395   restorePoint:    ''
   6396 fixedStack:      
   6397 stack:           
   6398 constants:       
   6399 body:             |
   6400   bb.0.entry:
   6401     liveins: $x3
   6402   
   6403     %0 = LI 871
   6404     %1 = XORI %0, 17
   6405     ; CHECK: LI 886
   6406     ; CHECK-LATE: li 3, 886
   6407     $x3 = EXTSW_32_64 %1
   6408     BLR8 implicit $lr8, implicit $rm, implicit $x3
   6409 
   6410 ...
   6411 ---
   6412 name:            testXOR8I
   6413 # CHECK-ALL: name: testXOR8I
   6414 alignment:       4
   6415 exposesReturnsTwice: false
   6416 legalized:       false
   6417 regBankSelected: false
   6418 selected:        false
   6419 tracksRegLiveness: true
   6420 registers:       
   6421   - { id: 0, class: g8rc, preferred-register: '' }
   6422   - { id: 1, class: g8rc, preferred-register: '' }
   6423 liveins:         
   6424   - { reg: '$x3', virtual-reg: '%0' }
   6425 frameInfo:       
   6426   isFrameAddressTaken: false
   6427   isReturnAddressTaken: false
   6428   hasStackMap:     false
   6429   hasPatchPoint:   false
   6430   stackSize:       0
   6431   offsetAdjustment: 0
   6432   maxAlignment:    0
   6433   adjustsStack:    false
   6434   hasCalls:        false
   6435   stackProtector:  ''
   6436   maxCallFrameSize: 4294967295
   6437   hasOpaqueSPAdjustment: false
   6438   hasVAStart:      false
   6439   hasMustTailInVarArgFunc: false
   6440   savePoint:       ''
   6441   restorePoint:    ''
   6442 fixedStack:      
   6443 stack:           
   6444 constants:       
   6445 body:             |
   6446   bb.0.entry:
   6447     liveins: $x3
   6448   
   6449     %0 = LI8 453
   6450     %1 = XORI8 %0, 17
   6451     ; CHECK: LI8 468
   6452     ; CHECK-LATE: li 3, 468
   6453     $x3 = COPY %1
   6454     BLR8 implicit $lr8, implicit $rm, implicit $x3
   6455 
   6456 ...
   6457