1# RUN: llc -o /dev/null %s -run-pass=machine-scheduler -mtriple aarch64-- -mattr=-fuse-aes,+crypto -misched-print-dags 2>&1 | FileCheck %s --check-prefixes=CHECK,NOFUSE 2# RUN: llc -o /dev/null %s -run-pass=machine-scheduler -mtriple aarch64-- -mattr=+fuse-aes,+crypto -misched-print-dags 2>&1 | FileCheck %s --check-prefixes=CHECK,FUSEAES 3# RUN: llc -o /dev/null %s -run-pass=machine-scheduler -mtriple aarch64-- -mattr=+fuse-aes,+fuse-crypto-eor,+crypto -misched-print-dags 2>&1 | FileCheck %s --check-prefixes=CHECK,FUSEAES,FUSECRYPTO 4# REQUIRES: asserts 5 6name: func 7body: | 8 bb.0: 9 ; CHECK: SU(0): %0:fpr128 = AESErr undef $q0(tied-def 0), undef $q1 10 ; CHECK: Successors: 11 ; NOFUSE-NOT: SU({{.*}}): Ord 12 ; FUSEAES: SU(1): Ord Latency=0 Cluster 13 ; CHECK: SU(1): %1:fpr128 = AESMCrrTied %0:fpr128 14 %0:fpr128 = AESErr undef $q0, undef $q1 15 %1:fpr128 = AESMCrrTied %0 16 17 ; CHECK: SU(2): %2:fpr128 = AESErr undef $q2(tied-def 0), undef $q3 18 ; CHECK: Successors: 19 ; NOFUSE-NOT: SU({{.*}}): Ord 20 ; FUSEAES: SU(3): Ord Latency=0 Cluster 21 ; CHECK: SU(3): dead %3:fpr128 = AESMCrr %2:fpr128 22 %2:fpr128 = AESErr undef $q2, undef $q3 23 %3:fpr128 = AESMCrr %2 24 25 ; CHECK: SU(4): %4:fpr128 = AESErr %1:fpr128(tied-def 0), undef $q4 26 ; CHECK: Successors: 27 ; NOFUSE-NOT: SU({{.*}}): Ord 28 ; FUSEAES-NOT: SU({{.*}}): Ord 29 ; FUSECRYPTO: SU(5): Ord Latency=0 Cluster 30 ; CHECK: SU(5): dead %5:fpr128 = EORv16i8 %4:fpr128, undef $q5 31 %4:fpr128 = AESErr %1, undef $q4 32 %5:fpr128 = EORv16i8 %4, undef $q5 33 34 ; CHECK: SU(6): %6:fpr128 = AESDrr undef $q0(tied-def 0), undef $q1 35 ; CHECK: Successors: 36 ; NOFUSE-NOT: SU({{.*}}): Ord 37 ; FUSEAES: SU(7): Ord Latency=0 Cluster 38 ; CHECK: SU(7): %7:fpr128 = AESIMCrrTied %6:fpr128 39 %6:fpr128 = AESDrr undef $q0, undef $q1 40 %7:fpr128 = AESIMCrrTied %6 41 42 ; CHECK: SU(8): %8:fpr128 = AESDrr undef $q2(tied-def 0), undef $q3 43 ; CHECK: Successors: 44 ; NOFUSE-NOT: SU({{.*}}): Ord 45 ; FUSEAES: SU(9): Ord Latency=0 Cluster 46 ; CHECK: SU(9): dead %9:fpr128 = AESIMCrr %8:fpr128 47 %8:fpr128 = AESDrr undef $q2, undef $q3 48 %9:fpr128 = AESIMCrr %8 49 50 ; CHECK: SU(10): %10:fpr128 = AESDrr %7:fpr128(tied-def 0), undef $q0 51 ; CHECK: Successors: 52 ; NOFUSE-NOT: SU({{.*}}): Ord 53 ; FUSEAES-NOT: SU({{.*}}): Ord 54 ; FUSECRYPTO: SU(11): Ord Latency=0 Cluster 55 ; CHECK: SU(11): dead %11:fpr128 = EORv16i8 %10:fpr128, undef $q1 56 %10:fpr128 = AESDrr %7, undef $q0 57 %11:fpr128 = EORv16i8 %10, undef $q1 58 59 ; CHECK: SU(12): %12:fpr128 = PMULLv16i8 undef $q0, undef $q1 60 ; CHECK: Successors: 61 ; NOFUSE-NOT: SU({{.*}}): Ord 62 ; FUSEAES-NOT: SU({{.*}}): Ord 63 ; FUSECRYPTO: SU(13): Ord Latency=0 Cluster 64 ; CHECK: SU(13): dead %13:fpr128 = EORv16i8 %12:fpr128, undef $q2 65 %12:fpr128 = PMULLv16i8 undef $q0, undef $q1 66 %13:fpr128 = EORv16i8 %12, undef $q2 67 68 ; CHECK: SU(14): %14:fpr128 = PMULLv8i8 undef $d0, undef $d1 69 ; CHECK: Successors: 70 ; NOFUSE-NOT: SU({{.*}}): Ord 71 ; FUSEAES-NOT: SU({{.*}}): Ord 72 ; FUSECRYPTO: SU(15): Ord Latency=0 Cluster 73 ; CHECK: SU(15): dead %15:fpr128 = EORv16i8 %14:fpr128, undef $q3 74 %14:fpr128 = PMULLv8i8 undef $d0, undef $d1 75 %15:fpr128 = EORv16i8 %14, undef $q3 76