111 lines · plain
1# RUN: llc -mtriple=hexagon -run-pass pipeliner -debug-only=pipeliner %s -o /dev/null 2>&1 -pipeliner-experimental-cg=true | FileCheck %s2# REQUIRES: asserts3 4# Test that the loop carried dependence check correctly identifies a recurrence.5 6# CHECK: Overlap check:7# CHECK-NEXT: BaseMI: S2_storerh_io %{{[0-9]+}}:intregs, 0, %{{[0-9]+}}:intregs :: (store (s16) into %ir.lsr.iv24)8# CHECK-NEXT: Base + 0 + I * 4, Len: 29# CHECK-NEXT: OtherMI: %{{[0-9]+}}:intregs = L2_loadrh_io %{{[0-9]+}}:intregs, -8 :: (load (s16) from %ir.cgep10)10# CHECK-NEXT: Base + -8 + I * 4, Len: 211# CHECK-NEXT: Result: Overlap12 13# CHECK: Rec NodeSet14# CHECK: Rec NodeSet15# CHECK: Rec NodeSet16# CHECK: Rec NodeSet17# CHECK-NEXT: SU(4)18# CHECK-NEXT: SU(6)19 20--- |21 22 %struct.A = type { i16, i16 }23 24 define i32 @test(ptr noalias nocapture %s, ptr noalias nocapture readonly %r, i32 %n) {25 entry:26 %cmp19 = icmp eq i32 %n, 227 br i1 %cmp19, label %for.end, label %for.body.preheader28 29 for.body.preheader:30 %0 = add i32 %n, -231 %cgep = getelementptr %struct.A, ptr %s, i32 2, i32 132 %scevgep1 = bitcast ptr %cgep to ptr33 %cgep9 = getelementptr i16, ptr %r, i32 234 br label %for.body35 36 for.body:37 %lsr.iv7 = phi ptr [ %cgep9, %for.body.preheader ], [ %cgep12, %for.body ]38 %lsr.iv2 = phi ptr [ %scevgep1, %for.body.preheader ], [ %cgep11, %for.body ]39 %lsr.iv = phi i32 [ %0, %for.body.preheader ], [ %lsr.iv.next, %for.body ]40 %sum.020 = phi i32 [ %add7, %for.body ], [ 0, %for.body.preheader ]41 %lsr.iv24 = bitcast ptr %lsr.iv2 to ptr42 %1 = load i16, ptr %lsr.iv7, align 243 %conv = sext i16 %1 to i3244 %cgep10 = getelementptr i16, ptr %lsr.iv24, i32 -445 %2 = load i16, ptr %cgep10, align 246 %conv2 = sext i16 %2 to i3247 %add = add i16 %1, 1048 store i16 %add, ptr %lsr.iv24, align 249 %add6 = add i32 %sum.020, %conv50 %add7 = add i32 %add6, %conv251 %lsr.iv.next = add i32 %lsr.iv, -152 %cmp = icmp eq i32 %lsr.iv.next, 053 %cgep11 = getelementptr %struct.A, ptr %lsr.iv2, i32 154 %cgep12 = getelementptr i16, ptr %lsr.iv7, i32 155 br i1 %cmp, label %for.end, label %for.body56 57 for.end:58 %sum.0.lcssa = phi i32 [ 0, %entry ], [ %add7, %for.body ]59 ret i32 %sum.0.lcssa60 }61 62...63---64name: test65tracksRegLiveness: true66 67body: |68 bb.0:69 successors: %bb.3, %bb.170 liveins: $r0, $r1, $r271 72 %14:intregs = COPY $r273 %13:intregs = COPY $r174 %12:intregs = COPY $r075 %16:predregs = C2_cmpeqi %14, 276 %15:intregs = A2_tfrsi 077 J2_jumpt killed %16, %bb.3, implicit-def dead $pc78 J2_jump %bb.1, implicit-def dead $pc79 80 bb.1:81 successors: %bb.282 83 %0:intregs = A2_addi %14, -284 %1:intregs = A2_addi %12, 1085 %2:intregs = A2_addi %13, 486 %17:intregs = A2_tfrsi 087 %23:intregs = COPY %088 J2_loop0r %bb.2, %23, implicit-def $lc0, implicit-def $sa0, implicit-def $usr89 90 bb.2 (machine-block-address-taken):91 successors: %bb.3, %bb.292 93 %3:intregs = PHI %2, %bb.1, %10, %bb.294 %4:intregs = PHI %1, %bb.1, %9, %bb.295 %6:intregs = PHI %17, %bb.1, %7, %bb.296 %18:intregs, %10:intregs = L2_loadrh_pi %3, 2 :: (load (s16) from %ir.lsr.iv7)97 %19:intregs = L2_loadrh_io %4, -8 :: (load (s16) from %ir.cgep10)98 %20:intregs = A2_addi %18, 1099 S2_storerh_io %4, 0, killed %20 :: (store (s16) into %ir.lsr.iv24)100 %7:intregs = M2_acci %19, %6, %18101 %9:intregs = A2_addi %4, 4102 ENDLOOP0 %bb.2, implicit-def $pc, implicit-def $lc0, implicit $sa0, implicit $lc0103 J2_jump %bb.3, implicit-def dead $pc104 105 bb.3:106 %11:intregs = PHI %15, %bb.0, %7, %bb.2107 $r0 = COPY %11108 PS_jmpret $r31, implicit-def dead $pc, implicit $r0109 110...111