1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs < %s | FileCheck %s 3target datalayout = "E-m:e-p:32:32-i128:64-n32" 4target triple = "powerpc-ellcc-linux" 5 6; Function Attrs: nounwind 7define void @foo1(ptr %a, ptr readonly %b, ptr readonly %c) #0 { 8; CHECK-LABEL: foo1: 9; CHECK: # %bb.0: # %entry 10; CHECK-NEXT: stwu 1, -64(1) 11; CHECK-NEXT: stw 29, 52(1) # 4-byte Folded Spill 12; CHECK-NEXT: li 7, 2048 13; CHECK-NEXT: stw 30, 56(1) # 4-byte Folded Spill 14; CHECK-NEXT: li 6, 0 15; CHECK-NEXT: mtctr 7 16; CHECK-NEXT: addi 7, 1, 16 17; CHECK-NEXT: .LBB0_1: # %for.body 18; CHECK-NEXT: # 19; CHECK-NEXT: lwz 8, 0(4) 20; CHECK-NEXT: lwz 9, 4(4) 21; CHECK-NEXT: lwz 10, 8(4) 22; CHECK-NEXT: lwz 11, 12(4) 23; CHECK-NEXT: lwz 12, 12(5) 24; CHECK-NEXT: stw 6, 44(1) 25; CHECK-NEXT: stw 6, 40(1) 26; CHECK-NEXT: stw 6, 36(1) 27; CHECK-NEXT: stw 6, 32(1) 28; CHECK-NEXT: stw 11, 28(1) 29; CHECK-NEXT: stw 10, 24(1) 30; CHECK-NEXT: clrlwi 10, 12, 27 31; CHECK-NEXT: stw 9, 20(1) 32; CHECK-NEXT: stw 8, 16(1) 33; CHECK-NEXT: rlwinm 8, 12, 29, 28, 29 34; CHECK-NEXT: lwzux 9, 8, 7 35; CHECK-NEXT: subfic 12, 10, 32 36; CHECK-NEXT: lwz 11, 8(8) 37; CHECK-NEXT: slw 9, 9, 10 38; CHECK-NEXT: lwz 0, 4(8) 39; CHECK-NEXT: lwz 8, 12(8) 40; CHECK-NEXT: srw 30, 11, 12 41; CHECK-NEXT: slw 29, 0, 10 42; CHECK-NEXT: srw 0, 0, 12 43; CHECK-NEXT: srw 12, 8, 12 44; CHECK-NEXT: slw 11, 11, 10 45; CHECK-NEXT: slw 8, 8, 10 46; CHECK-NEXT: stw 8, 12(3) 47; CHECK-NEXT: or 8, 11, 12 48; CHECK-NEXT: stw 8, 8(3) 49; CHECK-NEXT: or 8, 9, 0 50; CHECK-NEXT: stw 8, 0(3) 51; CHECK-NEXT: or 8, 29, 30 52; CHECK-NEXT: stw 8, 4(3) 53; CHECK-NEXT: bdnz .LBB0_1 54; CHECK-NEXT: # %bb.2: # %for.end 55; CHECK-NEXT: lwz 30, 56(1) # 4-byte Folded Reload 56; CHECK-NEXT: lwz 29, 52(1) # 4-byte Folded Reload 57; CHECK-NEXT: addi 1, 1, 64 58; CHECK-NEXT: blr 59entry: 60 br label %for.body 61 62for.body: ; preds = %for.body, %entry 63 %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 64 %0 = load i128, ptr %b, align 16 65 %1 = load i128, ptr %c, align 16 66 %shl = shl i128 %0, %1 67 store i128 %shl, ptr %a, align 16 68 %inc = add nsw i32 %i.02, 1 69 %exitcond = icmp eq i32 %inc, 2048 70 br i1 %exitcond, label %for.end, label %for.body 71 72for.end: ; preds = %for.body 73 ret void 74} 75 76; Function Attrs: nounwind 77define void @foo2(ptr %a, ptr readonly %b, ptr readonly %c) #0 { 78; CHECK-LABEL: foo2: 79; CHECK: # %bb.0: # %entry 80; CHECK-NEXT: stwu 1, -48(1) 81; CHECK-NEXT: stw 30, 40(1) # 4-byte Folded Spill 82; CHECK-NEXT: li 6, 2048 83; CHECK-NEXT: mtctr 6 84; CHECK-NEXT: addi 6, 1, 24 85; CHECK-NEXT: .LBB1_1: # %for.body 86; CHECK-NEXT: # 87; CHECK-NEXT: lwz 7, 0(4) 88; CHECK-NEXT: lwz 8, 4(4) 89; CHECK-NEXT: lwz 11, 12(5) 90; CHECK-NEXT: lwz 9, 8(4) 91; CHECK-NEXT: lwz 10, 12(4) 92; CHECK-NEXT: stw 8, 28(1) 93; CHECK-NEXT: rlwinm 8, 11, 29, 28, 29 94; CHECK-NEXT: stw 7, 24(1) 95; CHECK-NEXT: srawi 7, 7, 31 96; CHECK-NEXT: stw 10, 36(1) 97; CHECK-NEXT: clrlwi 10, 11, 27 98; CHECK-NEXT: stw 9, 32(1) 99; CHECK-NEXT: subfic 12, 10, 32 100; CHECK-NEXT: stw 7, 20(1) 101; CHECK-NEXT: stw 7, 16(1) 102; CHECK-NEXT: stw 7, 12(1) 103; CHECK-NEXT: stw 7, 8(1) 104; CHECK-NEXT: sub 7, 6, 8 105; CHECK-NEXT: lwz 8, 4(7) 106; CHECK-NEXT: lwz 9, 0(7) 107; CHECK-NEXT: lwz 11, 12(7) 108; CHECK-NEXT: srw 0, 8, 10 109; CHECK-NEXT: lwz 7, 8(7) 110; CHECK-NEXT: slw 30, 9, 12 111; CHECK-NEXT: slw 8, 8, 12 112; CHECK-NEXT: srw 11, 11, 10 113; CHECK-NEXT: slw 12, 7, 12 114; CHECK-NEXT: srw 7, 7, 10 115; CHECK-NEXT: or 7, 8, 7 116; CHECK-NEXT: stw 7, 8(3) 117; CHECK-NEXT: or 7, 12, 11 118; CHECK-NEXT: sraw 9, 9, 10 119; CHECK-NEXT: stw 7, 12(3) 120; CHECK-NEXT: or 7, 30, 0 121; CHECK-NEXT: stw 9, 0(3) 122; CHECK-NEXT: stw 7, 4(3) 123; CHECK-NEXT: bdnz .LBB1_1 124; CHECK-NEXT: # %bb.2: # %for.end 125; CHECK-NEXT: lwz 30, 40(1) # 4-byte Folded Reload 126; CHECK-NEXT: addi 1, 1, 48 127; CHECK-NEXT: blr 128entry: 129 br label %for.body 130 131for.body: ; preds = %for.body, %entry 132 %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 133 %0 = load i128, ptr %b, align 16 134 %1 = load i128, ptr %c, align 16 135 %shl = ashr i128 %0, %1 136 store i128 %shl, ptr %a, align 16 137 %inc = add nsw i32 %i.02, 1 138 %exitcond = icmp eq i32 %inc, 2048 139 br i1 %exitcond, label %for.end, label %for.body 140 141for.end: ; preds = %for.body 142 ret void 143} 144 145; Function Attrs: nounwind 146define void @foo3(ptr %a, ptr readonly %b, ptr readonly %c) #0 { 147; CHECK-LABEL: foo3: 148; CHECK: # %bb.0: # %entry 149; CHECK-NEXT: stwu 1, -64(1) 150; CHECK-NEXT: stw 29, 52(1) # 4-byte Folded Spill 151; CHECK-NEXT: li 7, 2048 152; CHECK-NEXT: stw 30, 56(1) # 4-byte Folded Spill 153; CHECK-NEXT: li 6, 0 154; CHECK-NEXT: mtctr 7 155; CHECK-NEXT: addi 7, 1, 32 156; CHECK-NEXT: .LBB2_1: # %for.body 157; CHECK-NEXT: # 158; CHECK-NEXT: lwz 8, 0(4) 159; CHECK-NEXT: lwz 12, 12(5) 160; CHECK-NEXT: lwz 9, 4(4) 161; CHECK-NEXT: lwz 10, 8(4) 162; CHECK-NEXT: lwz 11, 12(4) 163; CHECK-NEXT: stw 8, 32(1) 164; CHECK-NEXT: rlwinm 8, 12, 29, 28, 29 165; CHECK-NEXT: stw 6, 28(1) 166; CHECK-NEXT: sub 8, 7, 8 167; CHECK-NEXT: stw 6, 24(1) 168; CHECK-NEXT: stw 6, 20(1) 169; CHECK-NEXT: stw 6, 16(1) 170; CHECK-NEXT: stw 11, 44(1) 171; CHECK-NEXT: clrlwi 11, 12, 27 172; CHECK-NEXT: stw 10, 40(1) 173; CHECK-NEXT: subfic 0, 11, 32 174; CHECK-NEXT: stw 9, 36(1) 175; CHECK-NEXT: lwz 9, 4(8) 176; CHECK-NEXT: lwz 10, 0(8) 177; CHECK-NEXT: lwz 12, 12(8) 178; CHECK-NEXT: srw 30, 9, 11 179; CHECK-NEXT: lwz 8, 8(8) 180; CHECK-NEXT: slw 29, 10, 0 181; CHECK-NEXT: slw 9, 9, 0 182; CHECK-NEXT: srw 12, 12, 11 183; CHECK-NEXT: slw 0, 8, 0 184; CHECK-NEXT: srw 8, 8, 11 185; CHECK-NEXT: or 8, 9, 8 186; CHECK-NEXT: stw 8, 8(3) 187; CHECK-NEXT: or 8, 0, 12 188; CHECK-NEXT: srw 10, 10, 11 189; CHECK-NEXT: stw 8, 12(3) 190; CHECK-NEXT: or 8, 29, 30 191; CHECK-NEXT: stw 10, 0(3) 192; CHECK-NEXT: stw 8, 4(3) 193; CHECK-NEXT: bdnz .LBB2_1 194; CHECK-NEXT: # %bb.2: # %for.end 195; CHECK-NEXT: lwz 30, 56(1) # 4-byte Folded Reload 196; CHECK-NEXT: lwz 29, 52(1) # 4-byte Folded Reload 197; CHECK-NEXT: addi 1, 1, 64 198; CHECK-NEXT: blr 199entry: 200 br label %for.body 201 202for.body: ; preds = %for.body, %entry 203 %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 204 %0 = load i128, ptr %b, align 16 205 %1 = load i128, ptr %c, align 16 206 %shl = lshr i128 %0, %1 207 store i128 %shl, ptr %a, align 16 208 %inc = add nsw i32 %i.02, 1 209 %exitcond = icmp eq i32 %inc, 2048 210 br i1 %exitcond, label %for.end, label %for.body 211 212for.end: ; preds = %for.body 213 ret void 214} 215 216attributes #0 = { nounwind } 217 218