brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · 888c402 Raw
182 lines · plain
1# RUN: llc -run-pass=machine-combiner -mtriple=arm64-unknown-unknown %s -o - | FileCheck %s2# RUN: llc -run-pass=machine-combiner -mtriple=arm64-unknown-unknown -acc-max-width=2   %s -o -   | FileCheck %s  --check-prefix=NARROW-TREE3# RUN: llc -run-pass=machine-combiner -mtriple=arm64-unknown-unknown -acc-min-depth=100  %s -o -  | FileCheck %s  --check-prefix=NO-TREE4 5# A chain of UABAL instructions that can be reassociated for better ILP.6# Before the optimization, we accumulate in a single long chain.7# CHECK-LABEL: name:  uabal_accumulation8# CHECK:          [[START1:%.*]]:fpr128 = UABDLv4i16_v4i329# CHECK:          [[START2:%.*]]:fpr128 = UABDLv4i16_v4i3210# CHECK:          [[START3:%.*]]:fpr128 = UABDLv4i16_v4i3211# CHECK:          [[A1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START1]] 12# CHECK:          [[B1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START2]] 13# CHECK:          [[C1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START3]] 14# CHECK:          [[A2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A1]] 15# CHECK:          [[B2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[B1]] 16# CHECK:          [[C2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[C1]] 17# CHECK:          [[PARTIAL_SUM:%.*]]:fpr128 = ADDv4i32 killed [[A2]], killed [[B2]]18# CHECK:          [[TOTAL_SUM:%.*]]:fpr128 = ADDv4i32 killed [[PARTIAL_SUM]], killed [[C2]]19# CHECK:          [[END:%.*]]:fpr32 = ADDVv4i32v killed [[TOTAL_SUM]]20 21# NARROW-TREE:    [[START1:%.*]]:fpr128 = UABDLv4i16_v4i3222# NARROW-TREE:    [[START2:%.*]]:fpr128 = UABDLv4i16_v4i32          23# NARROW-TREE:    [[A1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START1]]24# NARROW-TREE:    [[B1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START2]]25# NARROW-TREE:    [[A2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A1]]              26# NARROW-TREE:    [[B2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[B1]]27# NARROW-TREE:    [[A3:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A2]]28# NARROW-TREE:    [[B3:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[B2]]29# NARROW-TREE:    [[A4:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A3]]30# NARROW-TREE:    [[PARTIAL_SUM:%.*]]:fpr128 = ADDv4i32 killed [[B3]], killed [[A4]]31# NARROW-TREE:    [[END:%.*]]:fpr32 = ADDVv4i32v killed [[PARTIAL_SUM]]  32 33# NO-TREE:        [[START1:%.*]]:fpr128 = UABDLv4i16_v4i3234# NO-TREE:        [[A1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START1]]35# NO-TREE:        [[A2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A1]]36# NO-TREE:        [[A3:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A2]]37# NO-TREE:        [[A4:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A3]]              38# NO-TREE:        [[A5:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A4]]39# NO-TREE:        [[A6:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A5]]40# NO-TREE:        [[A7:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A6]]41# NO-TREE:        [[A8:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A7]]42# NO-TREE:        [[END:%.*]]:fpr32 = ADDVv4i32v killed [[A8]]43 44---45name:            uabal_accumulation46body:             |47  bb.0.entry:48    liveins: $x0, $x1, $x2, $x349  50    %3:gpr64 = COPY $x351    %2:gpr64common = COPY $x252    %1:gpr64 = COPY $x153    %0:gpr64common = COPY $x054    %4:fpr64 = LDRDui %0, 0 :: (load (s64))55    %5:fpr64 = LDRDui %2, 0 :: (load (s64))56    %6:gpr64common = ADDXrr %0, %157    %7:gpr64common = ADDXrr %2, %358    %8:fpr64 = LDRDui %6, 0 :: (load (s64))59    %9:fpr64 = LDRDui %7, 0 :: (load (s64))60    %10:fpr128 = UABDLv4i16_v4i32 killed %8, killed %961    %11:fpr128 = UABALv4i16_v4i32 killed %10, killed %4, killed %562    %12:gpr64common = ADDXrr %6, %163    %13:gpr64common = ADDXrr %7, %364    %14:fpr64 = LDRDui %12, 0 :: (load (s64))65    %15:fpr64 = LDRDui %13, 0 :: (load (s64))66    %16:fpr128 = UABALv4i16_v4i32 killed %11, killed %14, killed %1567    %17:gpr64common = ADDXrr %12, %168    %18:gpr64common = ADDXrr %13, %369    %19:fpr64 = LDRDui %17, 0 :: (load (s64))70    %20:fpr64 = LDRDui %18, 0 :: (load (s64))71    %21:fpr128 = UABALv4i16_v4i32 killed %16, killed %19, killed %2072    %22:gpr64common = ADDXrr %17, %173    %23:gpr64common = ADDXrr %18, %374    %24:fpr64 = LDRDui %22, 0 :: (load (s64))75    %25:fpr64 = LDRDui %23, 0 :: (load (s64))76    %26:fpr128 = UABALv4i16_v4i32 killed %21, killed %24, killed %2577    %27:gpr64common = ADDXrr %22, %178    %28:gpr64common = ADDXrr %23, %379    %29:fpr64 = LDRDui %27, 0 :: (load (s64))80    %30:fpr64 = LDRDui %28, 0 :: (load (s64))81    %31:fpr128 = UABALv4i16_v4i32 killed %26, killed %29, killed %3082    %32:gpr64common = ADDXrr %27, %183    %33:gpr64common = ADDXrr %28, %384    %34:fpr64 = LDRDui %32, 0 :: (load (s64))85    %35:fpr64 = LDRDui %33, 0 :: (load (s64))86    %36:fpr128 = UABALv4i16_v4i32 killed %31, killed %34, killed %3587    %37:gpr64common = ADDXrr %32, %188    %38:gpr64common = ADDXrr %33, %389    %39:fpr64 = LDRDui %37, 0 :: (load (s64))90    %40:fpr64 = LDRDui %38, 0 :: (load (s64))91    %41:fpr128 = UABALv4i16_v4i32 killed %36, killed %39, killed %4092    %42:gpr64common = ADDXrr %37, %193    %43:gpr64common = ADDXrr %38, %394    %44:fpr64 = LDRDui %42, 0 :: (load (s64))95    %45:fpr64 = LDRDui %43, 0 :: (load (s64))96    %46:fpr128 = UABALv4i16_v4i32 killed %41, killed %44, killed %4597    %47:fpr32 = ADDVv4i32v killed %4698    %48:fpr128 = IMPLICIT_DEF99    %49:fpr128 = INSERT_SUBREG %48, killed %47, %subreg.ssub100    %50:gpr32all = COPY %49.ssub101    $w0 = COPY %50102    RET_ReallyLR implicit $w0103...104 105# In this test case we don't perform the reassociation because we don't recognize the106# instruction at the top of the chain.107# CHECK-LABEL: name:  uabal_accumulation_with_different_start108# CHECK:          [[START1:%.*]]:fpr128 = ADDv4i32109# CHECK:          [[START2:%.*]]:fpr128 = UABDLv4i16_v4i32110# CHECK:          [[START3:%.*]]:fpr128 = UABDLv4i16_v4i32111# CHECK:          [[A1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START1]]112# CHECK:          [[B1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START2]]113# CHECK:          [[C1:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[START3]]114# CHECK:          [[A2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[A1]]115# CHECK:          [[B2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[B1]]116# CHECK:          [[C2:%.*]]:fpr128 = UABALv4i16_v4i32 killed [[C1]]117# CHECK:          [[PARTIAL_SUM:%.*]]:fpr128 = ADDv4i32 killed [[A2]], killed [[B2]]118# CHECK:          [[TOTAL_SUM:%.*]]:fpr128 = ADDv4i32 killed [[PARTIAL_SUM]], killed [[C2]]119# CHECK:          [[END:%.*]]:fpr32 = ADDVv4i32v killed [[TOTAL_SUM]]120 121---122name:            uabal_accumulation_with_different_start123body:             |124  bb.0.entry:125    liveins: $x0, $x1, $x2, $x3126  127    %3:gpr64 = COPY $x3128    %2:gpr64common = COPY $x2129    %1:gpr64 = COPY $x1130    %0:gpr64common = COPY $x0131    %4:fpr64 = LDRDui %0, 0 :: (load (s64))132    %5:fpr64 = LDRDui %2, 0 :: (load (s64))133    %6:gpr64common = ADDXrr %0, %1134    %7:gpr64common = ADDXrr %2, %3135    %8:fpr128 = LDRQui %6, 0 :: (load (s128))136    %9:fpr128 = LDRQui %7, 0 :: (load (s128))137    %10:fpr128 = ADDv4i32 killed %8, killed %9138    %11:fpr128 = UABALv4i16_v4i32 killed %10, killed %4, killed %5139    %12:gpr64common = ADDXrr %6, %1140    %13:gpr64common = ADDXrr %7, %3141    %14:fpr64 = LDRDui %12, 0 :: (load (s64))142    %15:fpr64 = LDRDui %13, 0 :: (load (s64))143    %16:fpr128 = UABALv4i16_v4i32 killed %11, killed %14, killed %15144    %17:gpr64common = ADDXrr %12, %1145    %18:gpr64common = ADDXrr %13, %3146    %19:fpr64 = LDRDui %17, 0 :: (load (s64))147    %20:fpr64 = LDRDui %18, 0 :: (load (s64))148    %21:fpr128 = UABALv4i16_v4i32 killed %16, killed %19, killed %20149    %22:gpr64common = ADDXrr %17, %1150    %23:gpr64common = ADDXrr %18, %3151    %24:fpr64 = LDRDui %22, 0 :: (load (s64))152    %25:fpr64 = LDRDui %23, 0 :: (load (s64))153    %26:fpr128 = UABALv4i16_v4i32 killed %21, killed %24, killed %25154    %27:gpr64common = ADDXrr %22, %1155    %28:gpr64common = ADDXrr %23, %3156    %29:fpr64 = LDRDui %27, 0 :: (load (s64))157    %30:fpr64 = LDRDui %28, 0 :: (load (s64))158    %31:fpr128 = UABALv4i16_v4i32 killed %26, killed %29, killed %30159    %32:gpr64common = ADDXrr %27, %1160    %33:gpr64common = ADDXrr %28, %3161    %34:fpr64 = LDRDui %32, 0 :: (load (s64))162    %35:fpr64 = LDRDui %33, 0 :: (load (s64))163    %36:fpr128 = UABALv4i16_v4i32 killed %31, killed %34, killed %35164    %37:gpr64common = ADDXrr %32, %1165    %38:gpr64common = ADDXrr %33, %3166    %39:fpr64 = LDRDui %37, 0 :: (load (s64))167    %40:fpr64 = LDRDui %38, 0 :: (load (s64))168    %41:fpr128 = UABALv4i16_v4i32 killed %36, killed %39, killed %40169    %42:gpr64common = ADDXrr %37, %1170    %43:gpr64common = ADDXrr %38, %3171    %44:fpr64 = LDRDui %42, 0 :: (load (s64))172    %45:fpr64 = LDRDui %43, 0 :: (load (s64))173    %46:fpr128 = UABALv4i16_v4i32 killed %41, killed %44, killed %45174    %47:fpr32 = ADDVv4i32v killed %46175    %48:fpr128 = IMPLICIT_DEF176    %49:fpr128 = INSERT_SUBREG %48, killed %47, %subreg.ssub177    %50:gpr32all = COPY %49.ssub178    $w0 = COPY %50179    RET_ReallyLR implicit $w0180 181...182