147 lines · plain
1# RUN: llc -mtriple=hexagon -run-pass pipeliner -debug-only=pipeliner %s -o /dev/null 2>&1 | FileCheck %s2# REQUIRES: asserts3 4# Test boundary cases for loop carried dependence analysis5 6#CHECK: Overlap check:7#CHECK: BaseMI: S2_storeri_io %10:intregs, 0, %0:intregs :: (store (s32))8#CHECK: Base + 0 + I * 3, Len: 49#CHECK: OtherMI: dead %30:intregs = L2_loadri_io %10:intregs, 0 :: (load (s32))10#CHECK: Base + 0 + I * 3, Len: 411#CHECK: Result: Overlap12#CHECK: Overlap check:13#CHECK: BaseMI: S2_storeri_io %12:intregs, 0, %1:intregs :: (store (s32))14#CHECK: Base + 0 + I * 4, Len: 415#CHECK: OtherMI: dead %31:intregs = L2_loadri_io %12:intregs, 0 :: (load (s32))16#CHECK: Base + 0 + I * 4, Len: 417#CHECK: Result: No overlap18#CHECK: Overlap check:19#CHECK: BaseMI: S2_storeri_io %14:intregs, 0, %2:intregs :: (store (s64))20#CHECK: Base + 0 + I * 4, Len: 821#CHECK: OtherMI: dead %32:intregs = L2_loadri_io %14:intregs, 0 :: (load (s32))22#CHECK: Base + 0 + I * 4, Len: 423#CHECK: Result: Overlap24#CHECK: Overlap check:25#CHECK: BaseMI: S2_storeri_io %16:intregs, 0, %3:intregs :: (store (s32))26#CHECK: Base + 0 + I * 4, Len: 427#CHECK: OtherMI: dead %33:intregs = L2_loadri_io %16:intregs, -1 :: (load (s32))28#CHECK: Base + -1 + I * 4, Len: 429#CHECK: Result: Overlap30#CHECK: Overlap check:31#CHECK: BaseMI: S2_storeri_io %18:intregs, 1, %4:intregs :: (store (s32))32#CHECK: Base + 1 + I * 4, Len: 433#CHECK: OtherMI: dead %34:intregs = L2_loadri_io %18:intregs, 0 :: (load (s32))34#CHECK: Base + 0 + I * 4, Len: 435#CHECK: Result: Overlap36#CHECK: Overlap check:37#CHECK: BaseMI: S2_storeri_io %20:intregs, 0, %5:intregs :: (store (s32))38#CHECK: Base + 0 + I * -3, Len: 439#CHECK: OtherMI: dead %35:intregs = L2_loadri_io %20:intregs, 0 :: (load (s32))40#CHECK: Base + 0 + I * -3, Len: 441#CHECK: Result: Overlap42#CHECK: Overlap check:43#CHECK: BaseMI: S2_storeri_io %22:intregs, 0, %6:intregs :: (store (s32))44#CHECK: Base + 0 + I * -4, Len: 445#CHECK: OtherMI: dead %36:intregs = L2_loadri_io %22:intregs, 0 :: (load (s32))46#CHECK: Base + 0 + I * -4, Len: 447#CHECK: Result: No overlap48#CHECK: Overlap check:49#CHECK: BaseMI: S2_storeri_io %24:intregs, 0, %7:intregs :: (store (s32))50#CHECK: Base + 0 + I * -4, Len: 451#CHECK: OtherMI: dead %37:intregs = L2_loadri_io %24:intregs, 0 :: (load (s64))52#CHECK: Base + 0 + I * -4, Len: 853#CHECK: Result: Overlap54#CHECK: Overlap check:55#CHECK: BaseMI: S2_storeri_io %26:intregs, 0, %8:intregs :: (store (s32))56#CHECK: Base + 0 + I * -4, Len: 457#CHECK: OtherMI: dead %38:intregs = L2_loadri_io %26:intregs, 1 :: (load (s32))58#CHECK: Base + 1 + I * -4, Len: 459#CHECK: Result: Overlap60#CHECK: Overlap check:61#CHECK: BaseMI: S2_storeri_io %28:intregs, -1, %9:intregs :: (store (s32))62#CHECK: Base + -1 + I * -4, Len: 463#CHECK: OtherMI: dead %39:intregs = L2_loadri_io %28:intregs, 0 :: (load (s32))64#CHECK: Base + 0 + I * -4, Len: 465#CHECK: Result: Overlap66 67---68name: test69tracksRegLiveness: true70 71body: |72 bb.0:73 successors: %bb.174 75 %100:intregs = IMPLICIT_DEF76 %200:intregs = IMPLICIT_DEF77 %300:intregs = IMPLICIT_DEF78 %400:intregs = IMPLICIT_DEF79 %500:intregs = IMPLICIT_DEF80 %600:intregs = IMPLICIT_DEF81 %700:intregs = IMPLICIT_DEF82 %800:intregs = IMPLICIT_DEF83 %900:intregs = IMPLICIT_DEF84 %1000:intregs = IMPLICIT_DEF85 J2_loop0i %bb.1, 6, implicit-def $lc0, implicit-def $sa0, implicit-def $usr86 87 bb.1 (machine-block-address-taken):88 successors: %bb.1, %bb.289 90 %0:intregs = PHI %100, %bb.0, %1, %bb.191 %2:intregs = PHI %200, %bb.0, %3, %bb.192 %4:intregs = PHI %300, %bb.0, %5, %bb.193 %6:intregs = PHI %400, %bb.0, %7, %bb.194 %8:intregs = PHI %500, %bb.0, %9, %bb.195 %10:intregs = PHI %600, %bb.0, %11, %bb.196 %12:intregs = PHI %700, %bb.0, %13, %bb.197 %14:intregs = PHI %800, %bb.0, %15, %bb.198 %16:intregs = PHI %900, %bb.0, %17, %bb.199 %18:intregs = PHI %1000, %bb.0, %19, %bb.1100 101 %1:intregs = A2_addi %0, 3102 %101:intregs = L2_loadri_io %0, 0 :: (load (s32))103 S2_storeri_io %0, 0, %100 :: (store (s32))104 105 %3:intregs = A2_addi %2, 4106 %201:intregs = L2_loadri_io %2, 0 :: (load (s32))107 S2_storeri_io %2, 0, %200 :: (store (s32))108 109 %5:intregs = A2_addi %4, 4110 %301:intregs = L2_loadri_io %4, 0 :: (load (s32))111 S2_storeri_io %4, 0, %300 :: (store (s64))112 113 %7:intregs = A2_addi %6, 4114 %401:intregs = L2_loadri_io %6, -1 :: (load (s32))115 S2_storeri_io %6, 0, %400 :: (store (s32))116 117 %9:intregs = A2_addi %8, 4118 %501:intregs = L2_loadri_io %8, 0 :: (load (s32))119 S2_storeri_io %8, 1, %500 :: (store (s32))120 121 %11:intregs = A2_addi %10, -3122 %601:intregs = L2_loadri_io %10, 0 :: (load (s32))123 S2_storeri_io %10, 0, %600 :: (store (s32))124 125 %13:intregs = A2_addi %12, -4126 %701:intregs = L2_loadri_io %12, 0 :: (load (s32))127 S2_storeri_io %12, 0, %700 :: (store (s32))128 129 %15:intregs = A2_addi %14, -4130 %801:intregs = L2_loadri_io %14, 0 :: (load (s64))131 S2_storeri_io %14, 0, %800 :: (store (s32))132 133 %17:intregs = A2_addi %16, -4134 %901:intregs = L2_loadri_io %16, 1 :: (load (s32))135 S2_storeri_io %16, 0, %900 :: (store (s32))136 137 %19:intregs = A2_addi %18, -4138 %1001:intregs = L2_loadri_io %18, 0 :: (load (s32))139 S2_storeri_io %18, -1, %1000 :: (store (s32))140 141 ENDLOOP0 %bb.1, implicit-def $pc, implicit-def $lc0, implicit $sa0, implicit $lc0142 J2_jump %bb.2, implicit-def dead $pc143 144 bb.2:145 146...147