brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.8 KiB · cc38e25 Raw
980 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -ppc-asm-full-reg-names -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 < %s | FileCheck %s3 4; test_no_prep:5; unsigned long test_no_prep(char *p, int count) {6;   unsigned long i=0, res=0;7;   int DISP1 = 4001;8;   int DISP2 = 4002;9;   int DISP3 = 4003;10;   int DISP4 = 4004;11;   for (; i < count ; i++) {12;     unsigned long x1 = *(unsigned long *)(p + i + DISP1);13;     unsigned long x2 = *(unsigned long *)(p + i + DISP2);14;     unsigned long x3 = *(unsigned long *)(p + i + DISP3);15;     unsigned long x4 = *(unsigned long *)(p + i + DISP4);16;     res += x1*x2*x3*x4;17;   }18;   return res + count;19; }20 21define i64 @test_no_prep(ptr %arg, i32 signext %arg1) {22; CHECK-LABEL: test_no_prep:23; CHECK:       # %bb.0: # %bb24; CHECK-NEXT:    cmplwi r4, 025; CHECK-NEXT:    beq cr0, .LBB0_426; CHECK-NEXT:  # %bb.1: # %bb3.preheader27; CHECK-NEXT:    mtctr r428; CHECK-NEXT:    addi r5, r3, 400429; CHECK-NEXT:    li r3, 030; CHECK-NEXT:    li r6, -331; CHECK-NEXT:    li r7, -232; CHECK-NEXT:    li r8, -133; CHECK-NEXT:    .p2align 434; CHECK-NEXT:  .LBB0_2: # %bb335; CHECK-NEXT:    #36; CHECK-NEXT:    ldx r9, r5, r637; CHECK-NEXT:    ldx r10, r5, r738; CHECK-NEXT:    ldx r11, r5, r839; CHECK-NEXT:    ld r12, 0(r5)40; CHECK-NEXT:    addi r5, r5, 141; CHECK-NEXT:    mulld r9, r10, r942; CHECK-NEXT:    mulld r9, r9, r1143; CHECK-NEXT:    maddld r3, r9, r12, r344; CHECK-NEXT:    bdnz .LBB0_245; CHECK-NEXT:  # %bb.3: # %bb2546; CHECK-NEXT:    add r3, r3, r447; CHECK-NEXT:    blr48; CHECK-NEXT:  .LBB0_4:49; CHECK-NEXT:    addi r3, r4, 050; CHECK-NEXT:    blr51bb:52  %i = sext i32 %arg1 to i6453  %i2 = icmp eq i32 %arg1, 054  br i1 %i2, label %bb25, label %bb355 56bb3:                                              ; preds = %bb3, %bb57  %i4 = phi i64 [ %i23, %bb3 ], [ 0, %bb ]58  %i5 = phi i64 [ %i22, %bb3 ], [ 0, %bb ]59  %i6 = getelementptr inbounds i8, ptr %arg, i64 %i460  %i7 = getelementptr inbounds i8, ptr %i6, i64 400161  %i9 = load i64, ptr %i7, align 862  %i10 = getelementptr inbounds i8, ptr %i6, i64 400263  %i12 = load i64, ptr %i10, align 864  %i13 = getelementptr inbounds i8, ptr %i6, i64 400365  %i15 = load i64, ptr %i13, align 866  %i16 = getelementptr inbounds i8, ptr %i6, i64 400467  %i18 = load i64, ptr %i16, align 868  %i19 = mul i64 %i12, %i969  %i20 = mul i64 %i19, %i1570  %i21 = mul i64 %i20, %i1871  %i22 = add i64 %i21, %i572  %i23 = add nuw i64 %i4, 173  %i24 = icmp ult i64 %i23, %i74  br i1 %i24, label %bb3, label %bb2575 76bb25:                                             ; preds = %bb3, %bb77  %i26 = phi i64 [ 0, %bb ], [ %i22, %bb3 ]78  %i27 = add i64 %i26, %i79  ret i64 %i2780}81 82; test_ds_prep:83; unsigned long test_ds_prep(char *p, int count) {84;   unsigned long i=0, res=0;85;   int DISP1 = 4001;86;   int DISP2 = 4002;87;   int DISP3 = 4003;88;   int DISP4 = 4006;89;   for (; i < count ; i++) {90;     unsigned long x1 = *(unsigned long *)(p + i + DISP1);91;     unsigned long x2 = *(unsigned long *)(p + i + DISP2);92;     unsigned long x3 = *(unsigned long *)(p + i + DISP3);93;     unsigned long x4 = *(unsigned long *)(p + i + DISP4);94;     res += x1*x2*x3*x4;95;   }96;   return res + count;97; }98 99define i64 @test_ds_prep(ptr %arg, i32 signext %arg1) {100; CHECK-LABEL: test_ds_prep:101; CHECK:       # %bb.0: # %bb102; CHECK-NEXT:    cmplwi r4, 0103; CHECK-NEXT:    beq cr0, .LBB1_4104; CHECK-NEXT:  # %bb.1: # %bb3.preheader105; CHECK-NEXT:    mtctr r4106; CHECK-NEXT:    addi r7, r3, 4002107; CHECK-NEXT:    li r3, 0108; CHECK-NEXT:    li r5, -1109; CHECK-NEXT:    li r6, 1110; CHECK-NEXT:    .p2align 4111; CHECK-NEXT:  .LBB1_2: # %bb3112; CHECK-NEXT:    #113; CHECK-NEXT:    ldx r8, r7, r5114; CHECK-NEXT:    ld r9, 0(r7)115; CHECK-NEXT:    ldx r10, r7, r6116; CHECK-NEXT:    ld r11, 4(r7)117; CHECK-NEXT:    addi r7, r7, 1118; CHECK-NEXT:    mulld r8, r9, r8119; CHECK-NEXT:    mulld r8, r8, r10120; CHECK-NEXT:    maddld r3, r8, r11, r3121; CHECK-NEXT:    bdnz .LBB1_2122; CHECK-NEXT:  # %bb.3: # %bb25123; CHECK-NEXT:    add r3, r3, r4124; CHECK-NEXT:    blr125; CHECK-NEXT:  .LBB1_4:126; CHECK-NEXT:    addi r3, r4, 0127; CHECK-NEXT:    blr128bb:129  %i = sext i32 %arg1 to i64130  %i2 = icmp eq i32 %arg1, 0131  br i1 %i2, label %bb25, label %bb3132 133bb3:                                              ; preds = %bb3, %bb134  %i4 = phi i64 [ %i23, %bb3 ], [ 0, %bb ]135  %i5 = phi i64 [ %i22, %bb3 ], [ 0, %bb ]136  %i6 = getelementptr inbounds i8, ptr %arg, i64 %i4137  %i7 = getelementptr inbounds i8, ptr %i6, i64 4001138  %i9 = load i64, ptr %i7, align 8139  %i10 = getelementptr inbounds i8, ptr %i6, i64 4002140  %i12 = load i64, ptr %i10, align 8141  %i13 = getelementptr inbounds i8, ptr %i6, i64 4003142  %i15 = load i64, ptr %i13, align 8143  %i16 = getelementptr inbounds i8, ptr %i6, i64 4006144  %i18 = load i64, ptr %i16, align 8145  %i19 = mul i64 %i12, %i9146  %i20 = mul i64 %i19, %i15147  %i21 = mul i64 %i20, %i18148  %i22 = add i64 %i21, %i5149  %i23 = add nuw i64 %i4, 1150  %i24 = icmp ult i64 %i23, %i151  br i1 %i24, label %bb3, label %bb25152 153bb25:                                             ; preds = %bb3, %bb154  %i26 = phi i64 [ 0, %bb ], [ %i22, %bb3 ]155  %i27 = add i64 %i26, %i156  ret i64 %i27157}158 159; test_max_number_reminder:160; unsigned long test_max_number_reminder(char *p, int count) {161;  unsigned long i=0, res=0;162;  int DISP1 = 4001;163;  int DISP2 = 4002;164;  int DISP3 = 4003;165;  int DISP4 = 4005;166;  int DISP5 = 4006;167;  int DISP6 = 4007;168;  int DISP7 = 4014;169;  int DISP8 = 4010;170;  int DISP9 = 4011;171;  for (; i < count ; i++) {172;    unsigned long x1 = *(unsigned long *)(p + i + DISP1);173;    unsigned long x2 = *(unsigned long *)(p + i + DISP2);174;    unsigned long x3 = *(unsigned long *)(p + i + DISP3);175;    unsigned long x4 = *(unsigned long *)(p + i + DISP4);176;    unsigned long x5 = *(unsigned long *)(p + i + DISP5);177;    unsigned long x6 = *(unsigned long *)(p + i + DISP6);178;    unsigned long x7 = *(unsigned long *)(p + i + DISP7);179;    unsigned long x8 = *(unsigned long *)(p + i + DISP8);180;    unsigned long x9 = *(unsigned long *)(p + i + DISP9);181;    res += x1*x2*x3*x4*x5*x6*x7*x8*x9;182;  }183;  return res + count;184;}185 186define i64 @test_max_number_reminder(ptr %arg, i32 signext %arg1) {187; CHECK-LABEL: test_max_number_reminder:188; CHECK:       # %bb.0: # %bb189; CHECK-NEXT:    cmplwi r4, 0190; CHECK-NEXT:    beq cr0, .LBB2_4191; CHECK-NEXT:  # %bb.1: # %bb3.preheader192; CHECK-NEXT:    std r25, -56(r1) # 8-byte Folded Spill193; CHECK-NEXT:    std r26, -48(r1) # 8-byte Folded Spill194; CHECK-NEXT:    addi r10, r3, 4002195; CHECK-NEXT:    li r3, 0196; CHECK-NEXT:    li r5, -1197; CHECK-NEXT:    li r6, 1198; CHECK-NEXT:    li r7, 3199; CHECK-NEXT:    li r8, 5200; CHECK-NEXT:    li r9, 9201; CHECK-NEXT:    std r27, -40(r1) # 8-byte Folded Spill202; CHECK-NEXT:    std r28, -32(r1) # 8-byte Folded Spill203; CHECK-NEXT:    std r29, -24(r1) # 8-byte Folded Spill204; CHECK-NEXT:    std r30, -16(r1) # 8-byte Folded Spill205; CHECK-NEXT:    mtctr r4206; CHECK-NEXT:    .p2align 4207; CHECK-NEXT:  .LBB2_2: # %bb3208; CHECK-NEXT:    #209; CHECK-NEXT:    ldx r11, r10, r5210; CHECK-NEXT:    ld r12, 0(r10)211; CHECK-NEXT:    ldx r0, r10, r6212; CHECK-NEXT:    ldx r30, r10, r7213; CHECK-NEXT:    mulld r11, r12, r11214; CHECK-NEXT:    ld r29, 4(r10)215; CHECK-NEXT:    ldx r28, r10, r8216; CHECK-NEXT:    ld r27, 12(r10)217; CHECK-NEXT:    ld r26, 8(r10)218; CHECK-NEXT:    ldx r25, r10, r9219; CHECK-NEXT:    addi r10, r10, 1220; CHECK-NEXT:    mulld r11, r11, r0221; CHECK-NEXT:    mulld r11, r11, r30222; CHECK-NEXT:    mulld r11, r11, r29223; CHECK-NEXT:    mulld r11, r11, r28224; CHECK-NEXT:    mulld r11, r11, r27225; CHECK-NEXT:    mulld r11, r11, r26226; CHECK-NEXT:    maddld r3, r11, r25, r3227; CHECK-NEXT:    bdnz .LBB2_2228; CHECK-NEXT:  # %bb.3:229; CHECK-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload230; CHECK-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload231; CHECK-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload232; CHECK-NEXT:    ld r27, -40(r1) # 8-byte Folded Reload233; CHECK-NEXT:    add r3, r3, r4234; CHECK-NEXT:    ld r26, -48(r1) # 8-byte Folded Reload235; CHECK-NEXT:    ld r25, -56(r1) # 8-byte Folded Reload236; CHECK-NEXT:    blr237; CHECK-NEXT:  .LBB2_4:238; CHECK-NEXT:    addi r3, r4, 0239; CHECK-NEXT:    blr240bb:241  %i = sext i32 %arg1 to i64242  %i2 = icmp eq i32 %arg1, 0243  br i1 %i2, label %bb45, label %bb3244 245bb3:                                              ; preds = %bb3, %bb246  %i4 = phi i64 [ %i43, %bb3 ], [ 0, %bb ]247  %i5 = phi i64 [ %i42, %bb3 ], [ 0, %bb ]248  %i6 = getelementptr inbounds i8, ptr %arg, i64 %i4249  %i7 = getelementptr inbounds i8, ptr %i6, i64 4001250  %i9 = load i64, ptr %i7, align 8251  %i10 = getelementptr inbounds i8, ptr %i6, i64 4002252  %i12 = load i64, ptr %i10, align 8253  %i13 = getelementptr inbounds i8, ptr %i6, i64 4003254  %i15 = load i64, ptr %i13, align 8255  %i16 = getelementptr inbounds i8, ptr %i6, i64 4005256  %i18 = load i64, ptr %i16, align 8257  %i19 = getelementptr inbounds i8, ptr %i6, i64 4006258  %i21 = load i64, ptr %i19, align 8259  %i22 = getelementptr inbounds i8, ptr %i6, i64 4007260  %i24 = load i64, ptr %i22, align 8261  %i25 = getelementptr inbounds i8, ptr %i6, i64 4014262  %i27 = load i64, ptr %i25, align 8263  %i28 = getelementptr inbounds i8, ptr %i6, i64 4010264  %i30 = load i64, ptr %i28, align 8265  %i31 = getelementptr inbounds i8, ptr %i6, i64 4011266  %i33 = load i64, ptr %i31, align 8267  %i34 = mul i64 %i12, %i9268  %i35 = mul i64 %i34, %i15269  %i36 = mul i64 %i35, %i18270  %i37 = mul i64 %i36, %i21271  %i38 = mul i64 %i37, %i24272  %i39 = mul i64 %i38, %i27273  %i40 = mul i64 %i39, %i30274  %i41 = mul i64 %i40, %i33275  %i42 = add i64 %i41, %i5276  %i43 = add nuw i64 %i4, 1277  %i44 = icmp ult i64 %i43, %i278  br i1 %i44, label %bb3, label %bb45279 280bb45:                                             ; preds = %bb3, %bb281  %i46 = phi i64 [ 0, %bb ], [ %i42, %bb3 ]282  %i47 = add i64 %i46, %i283  ret i64 %i47284}285 286; test_update_ds_prep_interact:287; unsigned long test_update_ds_prep_interact(char *p, int count) {288;   unsigned long i=0, res=0;289;   int DISP1 = 4001;290;   int DISP2 = 4002;291;   int DISP3 = 4003;292;   int DISP4 = 4006;293;   for (; i < count ; i++) {294;     unsigned long x1 = *(unsigned long *)(p + 4 * i + DISP1);295;     unsigned long x2 = *(unsigned long *)(p + 4 * i + DISP2);296;     unsigned long x3 = *(unsigned long *)(p + 4 * i + DISP3);297;     unsigned long x4 = *(unsigned long *)(p + 4 * i + DISP4);298;     res += x1*x2*x3*x4;299;   }300;   return res + count;301; }302 303define dso_local i64 @test_update_ds_prep_interact(ptr %arg, i32 signext %arg1) {304; CHECK-LABEL: test_update_ds_prep_interact:305; CHECK:       # %bb.0: # %bb306; CHECK-NEXT:    cmplwi r4, 0307; CHECK-NEXT:    beq cr0, .LBB3_4308; CHECK-NEXT:  # %bb.1: # %bb3.preheader309; CHECK-NEXT:    mtctr r4310; CHECK-NEXT:    addi r5, r3, 3998311; CHECK-NEXT:    li r3, 0312; CHECK-NEXT:    li r6, -1313; CHECK-NEXT:    li r7, 1314; CHECK-NEXT:    .p2align 5315; CHECK-NEXT:  .LBB3_2: # %bb3316; CHECK-NEXT:    #317; CHECK-NEXT:    ldu r8, 4(r5)318; CHECK-NEXT:    ldx r9, r5, r6319; CHECK-NEXT:    ldx r10, r5, r7320; CHECK-NEXT:    ld r11, 4(r5)321; CHECK-NEXT:    mulld r8, r8, r9322; CHECK-NEXT:    mulld r8, r8, r10323; CHECK-NEXT:    maddld r3, r8, r11, r3324; CHECK-NEXT:    bdnz .LBB3_2325; CHECK-NEXT:  # %bb.3: # %bb26326; CHECK-NEXT:    add r3, r3, r4327; CHECK-NEXT:    blr328; CHECK-NEXT:  .LBB3_4:329; CHECK-NEXT:    addi r3, r4, 0330; CHECK-NEXT:    blr331bb:332  %i = sext i32 %arg1 to i64333  %i2 = icmp eq i32 %arg1, 0334  br i1 %i2, label %bb26, label %bb3335 336bb3:                                              ; preds = %bb3, %bb337  %i4 = phi i64 [ %i24, %bb3 ], [ 0, %bb ]338  %i5 = phi i64 [ %i23, %bb3 ], [ 0, %bb ]339  %i6 = shl i64 %i4, 2340  %i7 = getelementptr inbounds i8, ptr %arg, i64 %i6341  %i8 = getelementptr inbounds i8, ptr %i7, i64 4001342  %i10 = load i64, ptr %i8, align 8343  %i11 = getelementptr inbounds i8, ptr %i7, i64 4002344  %i13 = load i64, ptr %i11, align 8345  %i14 = getelementptr inbounds i8, ptr %i7, i64 4003346  %i16 = load i64, ptr %i14, align 8347  %i17 = getelementptr inbounds i8, ptr %i7, i64 4006348  %i19 = load i64, ptr %i17, align 8349  %i20 = mul i64 %i13, %i10350  %i21 = mul i64 %i20, %i16351  %i22 = mul i64 %i21, %i19352  %i23 = add i64 %i22, %i5353  %i24 = add nuw i64 %i4, 1354  %i25 = icmp ult i64 %i24, %i355  br i1 %i25, label %bb3, label %bb26356 357bb26:                                             ; preds = %bb3, %bb358  %i27 = phi i64 [ 0, %bb ], [ %i23, %bb3 ]359  %i28 = add i64 %i27, %i360  ret i64 %i28361}362 363; test_update_ds_prep_nointeract:364; unsigned long test_update_ds_prep_nointeract(char *p, int count) {365;   unsigned long i=0, res=0;366;   int DISP1 = 4001;367;   int DISP2 = 4002;368;   int DISP3 = 4003;369;   int DISP4 = 4007;370;   for (; i < count ; i++) {371;     char x1 = *(p + i + DISP1);372;     unsigned long x2 = *(unsigned long *)(p + i + DISP2);373;     unsigned long x3 = *(unsigned long *)(p + i + DISP3);374;     unsigned long x4 = *(unsigned long *)(p + i + DISP4);375;     res += (unsigned long)x1*x2*x3*x4;376;   }377;   return res + count;378; }379 380define i64 @test_update_ds_prep_nointeract(ptr %arg, i32 signext %arg1) {381; CHECK-LABEL: test_update_ds_prep_nointeract:382; CHECK:       # %bb.0: # %bb383; CHECK-NEXT:    cmplwi r4, 0384; CHECK-NEXT:    beq cr0, .LBB4_4385; CHECK-NEXT:  # %bb.1: # %bb3.preheader386; CHECK-NEXT:    mtctr r4387; CHECK-NEXT:    addi r5, r3, 4000388; CHECK-NEXT:    addi r6, r3, 4003389; CHECK-NEXT:    li r3, 0390; CHECK-NEXT:    li r7, -1391; CHECK-NEXT:    .p2align 4392; CHECK-NEXT:  .LBB4_2: # %bb3393; CHECK-NEXT:    #394; CHECK-NEXT:    lbzu r8, 1(r5)395; CHECK-NEXT:    ldx r9, r6, r7396; CHECK-NEXT:    ld r10, 0(r6)397; CHECK-NEXT:    ld r11, 4(r6)398; CHECK-NEXT:    addi r6, r6, 1399; CHECK-NEXT:    mulld r8, r9, r8400; CHECK-NEXT:    mulld r8, r8, r10401; CHECK-NEXT:    maddld r3, r8, r11, r3402; CHECK-NEXT:    bdnz .LBB4_2403; CHECK-NEXT:  # %bb.3: # %bb25404; CHECK-NEXT:    add r3, r3, r4405; CHECK-NEXT:    blr406; CHECK-NEXT:  .LBB4_4:407; CHECK-NEXT:    addi r3, r4, 0408; CHECK-NEXT:    blr409bb:410  %i = sext i32 %arg1 to i64411  %i2 = icmp eq i32 %arg1, 0412  br i1 %i2, label %bb25, label %bb3413 414bb3:                                              ; preds = %bb3, %bb415  %i4 = phi i64 [ %i23, %bb3 ], [ 0, %bb ]416  %i5 = phi i64 [ %i22, %bb3 ], [ 0, %bb ]417  %i6 = getelementptr inbounds i8, ptr %arg, i64 %i4418  %i7 = getelementptr inbounds i8, ptr %i6, i64 4001419  %i8 = load i8, ptr %i7, align 1420  %i9 = getelementptr inbounds i8, ptr %i6, i64 4002421  %i11 = load i64, ptr %i9, align 8422  %i12 = getelementptr inbounds i8, ptr %i6, i64 4003423  %i14 = load i64, ptr %i12, align 8424  %i15 = getelementptr inbounds i8, ptr %i6, i64 4007425  %i17 = load i64, ptr %i15, align 8426  %i18 = zext i8 %i8 to i64427  %i19 = mul i64 %i11, %i18428  %i20 = mul i64 %i19, %i14429  %i21 = mul i64 %i20, %i17430  %i22 = add i64 %i21, %i5431  %i23 = add nuw i64 %i4, 1432  %i24 = icmp ult i64 %i23, %i433  br i1 %i24, label %bb3, label %bb25434 435bb25:                                             ; preds = %bb3, %bb436  %i26 = phi i64 [ 0, %bb ], [ %i22, %bb3 ]437  %i27 = add i64 %i26, %i438  ret i64 %i27439}440 441; test_ds_multiple_chains:442; unsigned long test_ds_multiple_chains(char *p, char *q, int count) {443;   unsigned long i=0, res=0;444;   int DISP1 = 4001;445;   int DISP2 = 4010;446;   int DISP3 = 4005;447;   int DISP4 = 4009;448;   for (; i < count ; i++) {449;     unsigned long x1 = *(unsigned long *)(p + i + DISP1);450;     unsigned long x2 = *(unsigned long *)(p + i + DISP2);451;     unsigned long x3 = *(unsigned long *)(p + i + DISP3);452;     unsigned long x4 = *(unsigned long *)(p + i + DISP4);453;     unsigned long x5 = *(unsigned long *)(q + i + DISP1);454;     unsigned long x6 = *(unsigned long *)(q + i + DISP2);455;     unsigned long x7 = *(unsigned long *)(q + i + DISP3);456;     unsigned long x8 = *(unsigned long *)(q + i + DISP4);457;     res += x1*x2*x3*x4*x5*x6*x7*x8;458;   }459;   return res + count;460; }461 462define dso_local i64 @test_ds_multiple_chains(ptr %arg, ptr %arg1, i32 signext %arg2) {463; CHECK-LABEL: test_ds_multiple_chains:464; CHECK:       # %bb.0: # %bb465; CHECK-NEXT:    cmplwi r5, 0466; CHECK-NEXT:    beq cr0, .LBB5_4467; CHECK-NEXT:  # %bb.1: # %bb4.preheader468; CHECK-NEXT:    std r30, -16(r1) # 8-byte Folded Spill469; CHECK-NEXT:    addi r6, r3, 4001470; CHECK-NEXT:    addi r4, r4, 4001471; CHECK-NEXT:    li r3, 0472; CHECK-NEXT:    li r7, 9473; CHECK-NEXT:    mtctr r5474; CHECK-NEXT:    .p2align 4475; CHECK-NEXT:  .LBB5_2: # %bb4476; CHECK-NEXT:    #477; CHECK-NEXT:    ld r8, 0(r6)478; CHECK-NEXT:    ldx r9, r6, r7479; CHECK-NEXT:    ld r10, 4(r6)480; CHECK-NEXT:    ld r11, 8(r6)481; CHECK-NEXT:    addi r6, r6, 1482; CHECK-NEXT:    mulld r8, r9, r8483; CHECK-NEXT:    ld r12, 0(r4)484; CHECK-NEXT:    ldx r0, r4, r7485; CHECK-NEXT:    ld r30, 4(r4)486; CHECK-NEXT:    ld r9, 8(r4)487; CHECK-NEXT:    addi r4, r4, 1488; CHECK-NEXT:    mulld r8, r8, r10489; CHECK-NEXT:    mulld r8, r8, r11490; CHECK-NEXT:    mulld r8, r8, r12491; CHECK-NEXT:    mulld r8, r8, r0492; CHECK-NEXT:    mulld r8, r8, r30493; CHECK-NEXT:    maddld r3, r8, r9, r3494; CHECK-NEXT:    bdnz .LBB5_2495; CHECK-NEXT:  # %bb.3:496; CHECK-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload497; CHECK-NEXT:    add r3, r3, r5498; CHECK-NEXT:    blr499; CHECK-NEXT:  .LBB5_4:500; CHECK-NEXT:    addi r3, r5, 0501; CHECK-NEXT:    blr502bb:503  %i = sext i32 %arg2 to i64504  %i3 = icmp eq i32 %arg2, 0505  br i1 %i3, label %bb43, label %bb4506 507bb4:                                              ; preds = %bb4, %bb508  %i5 = phi i64 [ %i41, %bb4 ], [ 0, %bb ]509  %i6 = phi i64 [ %i40, %bb4 ], [ 0, %bb ]510  %i7 = getelementptr inbounds i8, ptr %arg, i64 %i5511  %i8 = getelementptr inbounds i8, ptr %i7, i64 4001512  %i10 = load i64, ptr %i8, align 8513  %i11 = getelementptr inbounds i8, ptr %i7, i64 4010514  %i13 = load i64, ptr %i11, align 8515  %i14 = getelementptr inbounds i8, ptr %i7, i64 4005516  %i16 = load i64, ptr %i14, align 8517  %i17 = getelementptr inbounds i8, ptr %i7, i64 4009518  %i19 = load i64, ptr %i17, align 8519  %i20 = getelementptr inbounds i8, ptr %arg1, i64 %i5520  %i21 = getelementptr inbounds i8, ptr %i20, i64 4001521  %i23 = load i64, ptr %i21, align 8522  %i24 = getelementptr inbounds i8, ptr %i20, i64 4010523  %i26 = load i64, ptr %i24, align 8524  %i27 = getelementptr inbounds i8, ptr %i20, i64 4005525  %i29 = load i64, ptr %i27, align 8526  %i30 = getelementptr inbounds i8, ptr %i20, i64 4009527  %i32 = load i64, ptr %i30, align 8528  %i33 = mul i64 %i13, %i10529  %i34 = mul i64 %i33, %i16530  %i35 = mul i64 %i34, %i19531  %i36 = mul i64 %i35, %i23532  %i37 = mul i64 %i36, %i26533  %i38 = mul i64 %i37, %i29534  %i39 = mul i64 %i38, %i32535  %i40 = add i64 %i39, %i6536  %i41 = add nuw i64 %i5, 1537  %i42 = icmp ult i64 %i41, %i538  br i1 %i42, label %bb4, label %bb43539 540bb43:                                             ; preds = %bb4, %bb541  %i44 = phi i64 [ 0, %bb ], [ %i40, %bb4 ]542  %i45 = add i64 %i44, %i543  ret i64 %i45544}545 546; test_ds_cross_basic_blocks:547;extern char *arr;548;unsigned long foo(char *p, int count)549;{550;  unsigned long i=0, res=0;551;  int DISP1 = 4000;552;  int DISP2 = 4001;553;  int DISP3 = 4002;554;  int DISP4 = 4003;555;  int DISP5 = 4005;556;  int DISP6 = 4009;557;  unsigned long x1, x2, x3, x4, x5, x6;558;  x1=x2=x3=x4=x5=x6=1;559;  for (; i < count ; i++) {560;    if (arr[i] % 3 == 1) {561;      x1 += *(unsigned long *)(p + i + DISP1);562;      x2 += *(unsigned long *)(p + i + DISP2);563;    }564;    else if (arr[i] % 3 == 2) {565;      x3 += *(unsigned long *)(p + i + DISP3);566;      x4 += *(unsigned long *)(p + i + DISP5);567;    }568;    else {569;      x5 += *(unsigned long *)(p + i + DISP4);570;      x6 += *(unsigned long *)(p + i + DISP6);571;    }572;    res += x1*x2*x3*x4*x5*x6;573;  }574;  return res;575;}576 577@arr = external local_unnamed_addr global ptr, align 8578 579define i64 @test_ds_cross_basic_blocks(ptr %arg, i32 signext %arg1) {580; CHECK-LABEL: test_ds_cross_basic_blocks:581; CHECK:       # %bb.0: # %bb582; CHECK-NEXT:    cmplwi r4, 0583; CHECK-NEXT:    beq cr0, .LBB6_9584; CHECK-NEXT:  # %bb.1: # %bb3585; CHECK-NEXT:    addis r5, r2, .LC0@toc@ha586; CHECK-NEXT:    std r28, -32(r1) # 8-byte Folded Spill587; CHECK-NEXT:    std r29, -24(r1) # 8-byte Folded Spill588; CHECK-NEXT:    ld r5, .LC0@toc@l(r5)589; CHECK-NEXT:    std r30, -16(r1) # 8-byte Folded Spill590; CHECK-NEXT:    addi r6, r3, 4009591; CHECK-NEXT:    li r3, 0592; CHECK-NEXT:    li r7, -7593; CHECK-NEXT:    li r8, -6594; CHECK-NEXT:    li r9, 1595; CHECK-NEXT:    li r10, 1596; CHECK-NEXT:    li r11, 1597; CHECK-NEXT:    li r12, 1598; CHECK-NEXT:    li r0, 1599; CHECK-NEXT:    ld r5, 0(r5)600; CHECK-NEXT:    mtctr r4601; CHECK-NEXT:    li r4, 1602; CHECK-NEXT:    addi r5, r5, -1603; CHECK-NEXT:    b .LBB6_4604; CHECK-NEXT:    .p2align 4605; CHECK-NEXT:  .LBB6_2: # %bb18606; CHECK-NEXT:    #607; CHECK-NEXT:    addi r30, r6, -9608; CHECK-NEXT:    ld r30, 0(r30)609; CHECK-NEXT:    add r0, r30, r0610; CHECK-NEXT:    ld r30, -8(r6)611; CHECK-NEXT:    add r12, r30, r12612; CHECK-NEXT:  .LBB6_3: # %bb49613; CHECK-NEXT:    #614; CHECK-NEXT:    mulld r30, r12, r0615; CHECK-NEXT:    addi r6, r6, 1616; CHECK-NEXT:    mulld r30, r30, r11617; CHECK-NEXT:    mulld r30, r30, r10618; CHECK-NEXT:    mulld r30, r30, r9619; CHECK-NEXT:    maddld r3, r30, r4, r3620; CHECK-NEXT:    bdz .LBB6_8621; CHECK-NEXT:  .LBB6_4: # %bb5622; CHECK-NEXT:    #623; CHECK-NEXT:    lbzu r30, 1(r5)624; CHECK-NEXT:    mulli r29, r30, 171625; CHECK-NEXT:    rlwinm r28, r29, 24, 8, 30626; CHECK-NEXT:    srwi r29, r29, 9627; CHECK-NEXT:    add r29, r29, r28628; CHECK-NEXT:    sub r30, r30, r29629; CHECK-NEXT:    clrlwi r30, r30, 24630; CHECK-NEXT:    cmplwi r30, 1631; CHECK-NEXT:    beq cr0, .LBB6_2632; CHECK-NEXT:  # %bb.5: # %bb28633; CHECK-NEXT:    #634; CHECK-NEXT:    cmplwi r30, 2635; CHECK-NEXT:    bne cr0, .LBB6_7636; CHECK-NEXT:  # %bb.6: # %bb31637; CHECK-NEXT:    #638; CHECK-NEXT:    ldx r30, r6, r7639; CHECK-NEXT:    add r11, r30, r11640; CHECK-NEXT:    ld r30, -4(r6)641; CHECK-NEXT:    add r10, r30, r10642; CHECK-NEXT:    b .LBB6_3643; CHECK-NEXT:    .p2align 4644; CHECK-NEXT:  .LBB6_7: # %bb40645; CHECK-NEXT:    #646; CHECK-NEXT:    ldx r30, r6, r8647; CHECK-NEXT:    add r9, r30, r9648; CHECK-NEXT:    ld r30, 0(r6)649; CHECK-NEXT:    add r4, r30, r4650; CHECK-NEXT:    b .LBB6_3651; CHECK-NEXT:  .LBB6_8:652; CHECK-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload653; CHECK-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload654; CHECK-NEXT:    ld r28, -32(r1) # 8-byte Folded Reload655; CHECK-NEXT:    blr656; CHECK-NEXT:  .LBB6_9:657; CHECK-NEXT:    li r3, 0658; CHECK-NEXT:    blr659bb:660  %i = sext i32 %arg1 to i64661  %i2 = icmp eq i32 %arg1, 0662  br i1 %i2, label %bb64, label %bb3663 664bb3:                                              ; preds = %bb665  %i4 = load ptr, ptr @arr, align 8666  br label %bb5667 668bb5:                                              ; preds = %bb49, %bb3669  %i6 = phi i64 [ 1, %bb3 ], [ %i55, %bb49 ]670  %i7 = phi i64 [ 1, %bb3 ], [ %i54, %bb49 ]671  %i8 = phi i64 [ 1, %bb3 ], [ %i53, %bb49 ]672  %i9 = phi i64 [ 1, %bb3 ], [ %i52, %bb49 ]673  %i10 = phi i64 [ 1, %bb3 ], [ %i51, %bb49 ]674  %i11 = phi i64 [ 1, %bb3 ], [ %i50, %bb49 ]675  %i12 = phi i64 [ 0, %bb3 ], [ %i62, %bb49 ]676  %i13 = phi i64 [ 0, %bb3 ], [ %i61, %bb49 ]677  %i14 = getelementptr inbounds i8, ptr %i4, i64 %i12678  %i15 = load i8, ptr %i14, align 1679  %i16 = urem i8 %i15, 3680  %i17 = icmp eq i8 %i16, 1681  br i1 %i17, label %bb18, label %bb28682 683bb18:                                             ; preds = %bb5684  %i19 = getelementptr inbounds i8, ptr %arg, i64 %i12685  %i20 = getelementptr inbounds i8, ptr %i19, i64 4000686  %i22 = load i64, ptr %i20, align 8687  %i23 = add i64 %i22, %i11688  %i24 = getelementptr inbounds i8, ptr %i19, i64 4001689  %i26 = load i64, ptr %i24, align 8690  %i27 = add i64 %i26, %i10691  br label %bb49692 693bb28:                                             ; preds = %bb5694  %i29 = icmp eq i8 %i16, 2695  %i30 = getelementptr inbounds i8, ptr %arg, i64 %i12696  br i1 %i29, label %bb31, label %bb40697 698bb31:                                             ; preds = %bb28699  %i32 = getelementptr inbounds i8, ptr %i30, i64 4002700  %i34 = load i64, ptr %i32, align 8701  %i35 = add i64 %i34, %i9702  %i36 = getelementptr inbounds i8, ptr %i30, i64 4005703  %i38 = load i64, ptr %i36, align 8704  %i39 = add i64 %i38, %i8705  br label %bb49706 707bb40:                                             ; preds = %bb28708  %i41 = getelementptr inbounds i8, ptr %i30, i64 4003709  %i43 = load i64, ptr %i41, align 8710  %i44 = add i64 %i43, %i7711  %i45 = getelementptr inbounds i8, ptr %i30, i64 4009712  %i47 = load i64, ptr %i45, align 8713  %i48 = add i64 %i47, %i6714  br label %bb49715 716bb49:                                             ; preds = %bb40, %bb31, %bb18717  %i50 = phi i64 [ %i23, %bb18 ], [ %i11, %bb31 ], [ %i11, %bb40 ]718  %i51 = phi i64 [ %i27, %bb18 ], [ %i10, %bb31 ], [ %i10, %bb40 ]719  %i52 = phi i64 [ %i9, %bb18 ], [ %i35, %bb31 ], [ %i9, %bb40 ]720  %i53 = phi i64 [ %i8, %bb18 ], [ %i39, %bb31 ], [ %i8, %bb40 ]721  %i54 = phi i64 [ %i7, %bb18 ], [ %i7, %bb31 ], [ %i44, %bb40 ]722  %i55 = phi i64 [ %i6, %bb18 ], [ %i6, %bb31 ], [ %i48, %bb40 ]723  %i56 = mul i64 %i51, %i50724  %i57 = mul i64 %i56, %i52725  %i58 = mul i64 %i57, %i53726  %i59 = mul i64 %i58, %i54727  %i60 = mul i64 %i59, %i55728  %i61 = add i64 %i60, %i13729  %i62 = add nuw i64 %i12, 1730  %i63 = icmp ult i64 %i62, %i731  br i1 %i63, label %bb5, label %bb64732 733bb64:                                             ; preds = %bb49, %bb734  %i65 = phi i64 [ 0, %bb ], [ %i61, %bb49 ]735  ret i64 %i65736}737 738; test_ds_float:739;float test_ds_float(char *p, int count) {740;  int i=0 ;741;  float res=0;742;  int DISP1 = 4001;743;  int DISP2 = 4002;744;  int DISP3 = 4022;745;  int DISP4 = 4062;746;  for (; i < count ; i++) {747;    float x1 = *(float *)(p + i + DISP1);748;    float x2 = *(float *)(p + i + DISP2);749;    float x3 = *(float *)(p + i + DISP3);750;    float x4 = *(float *)(p + i + DISP4);751;    res += x1*x2*x3*x4;752;  }753;  return res;754;}755 756define float @test_ds_float(ptr %arg, i32 signext %arg1) {757; CHECK-LABEL: test_ds_float:758; CHECK:       # %bb.0: # %bb759; CHECK-NEXT:    cmpwi r4, 0760; CHECK-NEXT:    ble cr0, .LBB7_4761; CHECK-NEXT:  # %bb.1: # %bb2762; CHECK-NEXT:    clrldi r4, r4, 32763; CHECK-NEXT:    addi r3, r3, 4002764; CHECK-NEXT:    xxlxor f1, f1, f1765; CHECK-NEXT:    mtctr r4766; CHECK-NEXT:    li r4, -1767; CHECK-NEXT:    .p2align 4768; CHECK-NEXT:  .LBB7_2: # %bb4769; CHECK-NEXT:    #770; CHECK-NEXT:    lfsx f0, r3, r4771; CHECK-NEXT:    lfs f2, 0(r3)772; CHECK-NEXT:    xsmulsp f0, f0, f2773; CHECK-NEXT:    lfs f3, 20(r3)774; CHECK-NEXT:    xsmulsp f0, f0, f3775; CHECK-NEXT:    lfs f4, 60(r3)776; CHECK-NEXT:    addi r3, r3, 1777; CHECK-NEXT:    xsmulsp f0, f0, f4778; CHECK-NEXT:    xsaddsp f1, f1, f0779; CHECK-NEXT:    bdnz .LBB7_2780; CHECK-NEXT:  # %bb.3: # %bb26781; CHECK-NEXT:    blr782; CHECK-NEXT:  .LBB7_4:783; CHECK-NEXT:    xxlxor f1, f1, f1784; CHECK-NEXT:    blr785bb:786  %i = icmp sgt i32 %arg1, 0787  br i1 %i, label %bb2, label %bb26788 789bb2:                                              ; preds = %bb790  %i3 = zext i32 %arg1 to i64791  br label %bb4792 793bb4:                                              ; preds = %bb4, %bb2794  %i5 = phi i64 [ 0, %bb2 ], [ %i24, %bb4 ]795  %i6 = phi float [ 0.000000e+00, %bb2 ], [ %i23, %bb4 ]796  %i7 = getelementptr inbounds i8, ptr %arg, i64 %i5797  %i8 = getelementptr inbounds i8, ptr %i7, i64 4001798  %i10 = load float, ptr %i8, align 4799  %i11 = getelementptr inbounds i8, ptr %i7, i64 4002800  %i13 = load float, ptr %i11, align 4801  %i14 = getelementptr inbounds i8, ptr %i7, i64 4022802  %i16 = load float, ptr %i14, align 4803  %i17 = getelementptr inbounds i8, ptr %i7, i64 4062804  %i19 = load float, ptr %i17, align 4805  %i20 = fmul float %i10, %i13806  %i21 = fmul float %i20, %i16807  %i22 = fmul float %i21, %i19808  %i23 = fadd float %i6, %i22809  %i24 = add nuw nsw i64 %i5, 1810  %i25 = icmp eq i64 %i24, %i3811  br i1 %i25, label %bb26, label %bb4812 813bb26:                                             ; preds = %bb4, %bb814  %i27 = phi float [ 0.000000e+00, %bb ], [ %i23, %bb4 ]815  ret float %i27816}817 818; test_ds_combine_float_int:819;float test_ds_combine_float_int(char *p, int count) {820;  int i=0 ;821;  float res=0;822;  int DISP1 = 4001;823;  int DISP2 = 4002;824;  int DISP3 = 4022;825;  int DISP4 = 4062;826;  for (; i < count ; i++) {827;    float x1 = *(float *)(p + i + DISP1);828;    unsigned long x2 = *(unsigned long*)(p + i + DISP2);829;    float x3 = *(float *)(p + i + DISP3);830;    float x4 = *(float *)(p + i + DISP4);831;    res += x1*x2*x3*x4;832;  }833;  return res;834;}835 836define float @test_ds_combine_float_int(ptr %arg, i32 signext %arg1) {837; CHECK-LABEL: test_ds_combine_float_int:838; CHECK:       # %bb.0: # %bb839; CHECK-NEXT:    cmpwi r4, 0840; CHECK-NEXT:    ble cr0, .LBB8_4841; CHECK-NEXT:  # %bb.1: # %bb2842; CHECK-NEXT:    clrldi r4, r4, 32843; CHECK-NEXT:    addi r3, r3, 4002844; CHECK-NEXT:    xxlxor f1, f1, f1845; CHECK-NEXT:    mtctr r4846; CHECK-NEXT:    li r4, -1847; CHECK-NEXT:    .p2align 4848; CHECK-NEXT:  .LBB8_2: # %bb4849; CHECK-NEXT:    #850; CHECK-NEXT:    lfd f4, 0(r3)851; CHECK-NEXT:    lfsx f0, r3, r4852; CHECK-NEXT:    xscvuxdsp f4, f4853; CHECK-NEXT:    lfs f2, 20(r3)854; CHECK-NEXT:    lfs f3, 60(r3)855; CHECK-NEXT:    addi r3, r3, 1856; CHECK-NEXT:    xsmulsp f0, f0, f4857; CHECK-NEXT:    xsmulsp f0, f2, f0858; CHECK-NEXT:    xsmulsp f0, f3, f0859; CHECK-NEXT:    xsaddsp f1, f1, f0860; CHECK-NEXT:    bdnz .LBB8_2861; CHECK-NEXT:  # %bb.3: # %bb27862; CHECK-NEXT:    blr863; CHECK-NEXT:  .LBB8_4:864; CHECK-NEXT:    xxlxor f1, f1, f1865; CHECK-NEXT:    blr866bb:867  %i = icmp sgt i32 %arg1, 0868  br i1 %i, label %bb2, label %bb27869 870bb2:                                              ; preds = %bb871  %i3 = zext i32 %arg1 to i64872  br label %bb4873 874bb4:                                              ; preds = %bb4, %bb2875  %i5 = phi i64 [ 0, %bb2 ], [ %i25, %bb4 ]876  %i6 = phi float [ 0.000000e+00, %bb2 ], [ %i24, %bb4 ]877  %i7 = getelementptr inbounds i8, ptr %arg, i64 %i5878  %i8 = getelementptr inbounds i8, ptr %i7, i64 4001879  %i10 = load float, ptr %i8, align 4880  %i11 = getelementptr inbounds i8, ptr %i7, i64 4002881  %i13 = load i64, ptr %i11, align 8882  %i14 = getelementptr inbounds i8, ptr %i7, i64 4022883  %i16 = load float, ptr %i14, align 4884  %i17 = getelementptr inbounds i8, ptr %i7, i64 4062885  %i19 = load float, ptr %i17, align 4886  %i20 = uitofp i64 %i13 to float887  %i21 = fmul float %i10, %i20888  %i22 = fmul float %i16, %i21889  %i23 = fmul float %i19, %i22890  %i24 = fadd float %i6, %i23891  %i25 = add nuw nsw i64 %i5, 1892  %i26 = icmp eq i64 %i25, %i3893  br i1 %i26, label %bb27, label %bb4894 895bb27:                                             ; preds = %bb4, %bb896  %i28 = phi float [ 0.000000e+00, %bb ], [ %i24, %bb4 ]897  ret float %i28898}899 900; test_ds_lwa_prep:901; long long test_ds_lwa_prep(char *p, int count) {902;   long long i=0, res=0;903;   int DISP1 = 4001;904;   int DISP2 = 4002;905;   int DISP3 = 4006;906;   int DISP4 = 4010;907;   for (; i < count ; i++) {908;     long long x1 = *(int *)(p + i + DISP1);909;     long long x2 = *(int *)(p + i + DISP2);910;     long long x3 = *(int *)(p + i + DISP3);911;     long long x4 = *(int *)(p + i + DISP4);912;     res += x1*x2*x3*x4;913;   }914;   return res + count;915; }916 917define i64 @test_ds_lwa_prep(ptr %arg, i32 signext %arg1) {918; CHECK-LABEL: test_ds_lwa_prep:919; CHECK:       # %bb.0: # %bb920; CHECK-NEXT:    cmpwi r4, 0921; CHECK-NEXT:    ble cr0, .LBB9_4922; CHECK-NEXT:  # %bb.1: # %bb3.preheader923; CHECK-NEXT:    mtctr r4924; CHECK-NEXT:    addi r5, r3, 2925; CHECK-NEXT:    li r3, 0926; CHECK-NEXT:    li r6, -1927; CHECK-NEXT:    .p2align 4928; CHECK-NEXT:  .LBB9_2: # %bb3929; CHECK-NEXT:    #930; CHECK-NEXT:    lwax r7, r5, r6931; CHECK-NEXT:    lwa r8, 0(r5)932; CHECK-NEXT:    lwa r9, 4(r5)933; CHECK-NEXT:    lwa r10, 8(r5)934; CHECK-NEXT:    addi r5, r5, 1935; CHECK-NEXT:    mulld r7, r8, r7936; CHECK-NEXT:    mulld r7, r7, r9937; CHECK-NEXT:    maddld r3, r7, r10, r3938; CHECK-NEXT:    bdnz .LBB9_2939; CHECK-NEXT:  # %bb.3: # %bb29940; CHECK-NEXT:    add r3, r3, r4941; CHECK-NEXT:    blr942; CHECK-NEXT:  .LBB9_4:943; CHECK-NEXT:    addi r3, r4, 0944; CHECK-NEXT:    blr945bb:946  %i = sext i32 %arg1 to i64947  %i2 = icmp sgt i32 %arg1, 0948  br i1 %i2, label %bb3, label %bb29949 950bb3:                                              ; preds = %bb3, %bb951  %i4 = phi i64 [ %i27, %bb3 ], [ 0, %bb ]952  %i5 = phi i64 [ %i26, %bb3 ], [ 0, %bb ]953  %i6 = getelementptr inbounds i8, ptr %arg, i64 %i4954  %i7 = getelementptr inbounds i8, ptr %i6, i64 1955  %i9 = load i32, ptr %i7, align 4956  %i10 = sext i32 %i9 to i64957  %i11 = getelementptr inbounds i8, ptr %i6, i64 2958  %i13 = load i32, ptr %i11, align 4959  %i14 = sext i32 %i13 to i64960  %i15 = getelementptr inbounds i8, ptr %i6, i64 6961  %i17 = load i32, ptr %i15, align 4962  %i18 = sext i32 %i17 to i64963  %i19 = getelementptr inbounds i8, ptr %i6, i64 10964  %i21 = load i32, ptr %i19, align 4965  %i22 = sext i32 %i21 to i64966  %i23 = mul nsw i64 %i14, %i10967  %i24 = mul nsw i64 %i23, %i18968  %i25 = mul nsw i64 %i24, %i22969  %i26 = add nsw i64 %i25, %i5970  %i27 = add nuw nsw i64 %i4, 1971  %i28 = icmp eq i64 %i27, %i972  br i1 %i28, label %bb29, label %bb3973 974bb29:                                             ; preds = %bb3, %bb975  %i30 = phi i64 [ 0, %bb ], [ %i26, %bb3 ]976  %i31 = add nsw i64 %i30, %i977  ret i64 %i31978}979 980