1# RUN: llc -mtriple=arm64-apple-ios11.0.0 -o - -verify-machineinstrs -run-pass mir-canonicalizer %s | FileCheck %s 2# RUN: llc -mtriple=arm64-apple-ios11.0.0 -o - -mir-vreg-namer-use-stable-hash -verify-machineinstrs -run-pass mir-canonicalizer %s | FileCheck %s 3# These Idempotent instructions are sorted alphabetically (based on after the '=') 4# CHECK: %bb0_{{[0-9a-f]+}}__1:gpr64 = MOVi64imm 4617315517961601024 5# CHECK-NEXT: %bb0_{{[0-9a-f]+}}__1:gpr32 = MOVi32imm 408 6# CHECK-NEXT: %bb0_{{[0-9a-f]+}}__2:gpr32 = MOVi32imm 408 7# CHECK-NEXT: %bb0_{{[0-9a-f]+}}__1:gpr64all = IMPLICIT_DEF 8# CHECK-NEXT: %bb0_{{[0-9a-f]+}}__1:fpr64 = FMOVDi 20 9# CHECK-NEXT: %bb0_{{[0-9a-f]+}}__1:fpr64 = FMOVDi 112 10 11... 12--- 13name: Proc8 14stack: 15 - { id: 0, type: default, offset: 0, size: 4, alignment: 4, 16 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 17 local-offset: -4, debug-info-variable: '', debug-info-expression: '', 18 debug-info-location: '' } 19 - { id: 1, type: default, offset: 0, size: 8, alignment: 8, 20 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 21 local-offset: -16, debug-info-variable: '', debug-info-expression: '', 22 debug-info-location: '' } 23 - { id: 2, type: default, offset: 0, size: 8, alignment: 8, 24 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 25 local-offset: -24, debug-info-variable: '', debug-info-expression: '', 26 debug-info-location: '' } 27 - { id: 3, type: default, offset: 0, size: 8, alignment: 8, 28 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 29 local-offset: -32, debug-info-variable: '', debug-info-expression: '', 30 debug-info-location: '' } 31 - { id: 4, type: default, offset: 0, size: 8, alignment: 8, 32 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 33 local-offset: -40, debug-info-variable: '', debug-info-expression: '', 34 debug-info-location: '' } 35 - { id: 5, type: default, offset: 0, size: 8, alignment: 8, 36 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 37 local-offset: -48, debug-info-variable: '', debug-info-expression: '', 38 debug-info-location: '' } 39 - { id: 6, type: default, offset: 0, size: 8, alignment: 8, 40 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 41 local-offset: -56, debug-info-variable: '', debug-info-expression: '', 42 debug-info-location: '' } 43constants: 44body: | 45 bb.0: 46 liveins: $x0, $x1, $d0, $d1 47 48 %3:fpr64 = COPY $d1 49 %2:fpr64 = COPY $d0 50 %1:gpr64 = COPY $x1 51 %0:gpr64common = COPY $x0 52 STRXui %0, %stack.1, 0 :: (store (s64)) 53 STRXui %1, %stack.2, 0 :: (store (s64)) 54 STRDui %2, %stack.3, 0 :: (store (s64)) 55 STRDui %3, %stack.4, 0 :: (store (s64)) 56 57 %4:fpr64 = FMOVDi 20 58 %5:fpr64 = FADDDrr %2, killed %4, implicit $fpcr 59 STRDui %5, %stack.5, 0 :: (store (s64)) 60 61 %6:gpr32 = FCVTZSUWDr %5, implicit $fpcr 62 STRDroW %3, %0, killed %6, 1, 1 63 64 %7:gpr64common = LDRXui %stack.1, 0 :: (dereferenceable load (s64)) 65 %8:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load (s64)) 66 67 %9:gpr32common = FCVTZSUWDr killed %8, implicit $fpcr 68 %10:fpr64 = LDRDroW %7, %9, 1, 1 69 70 %11:gpr32common = ADDWri %9, 1, 0 71 STRDroW killed %10, %7, killed %11, 1, 1 72 73 %12:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load (s64)) 74 %13:gpr64common = LDRXui %stack.1, 0 :: (dereferenceable load (s64)) 75 76 %14:gpr32common = FCVTZSUWDr %12, implicit $fpcr 77 %15:gpr32common = ADDWri killed %14, 30, 0 78 STRDroW %12, killed %13, killed %15, 1, 1 79 80 %16:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load (s64)) 81 STRDui killed %16, %stack.6, 0 :: (store (s64)) 82 83 %19:fpr64 = FMOVDi 112 84 %46:gpr32 = MOVi32imm 408 85 %43:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load (s64)) 86 %44:gpr64 = LDRXui %stack.2, 0 :: (dereferenceable load (s64)) 87 88 %45:gpr32 = FCVTZSUWDr %43, implicit $fpcr 89 %47:gpr64common = SMADDLrrr killed %45, %46, killed %44 90 %48:fpr64 = LDRDui %stack.6, 0 :: (dereferenceable load (s64)) 91 92 %49:gpr32 = FCVTZSUWDr killed %48, implicit $fpcr 93 STRDroW %43, killed %47, killed %49, 1, 1 94 95 %21:gpr64 = LDRXui %stack.2, 0 :: (dereferenceable load (s64)) 96 %22:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load (s64)) 97 98 %23:gpr32 = FCVTZSUWDr killed %22, implicit $fpcr 99 %24:gpr32 = MOVi32imm 408 100 %25:gpr64common = SMADDLrrr %23, %24, killed %21 101 %26:gpr64sp = ADDXrx killed %25, %23, 51 102 %27:fpr64 = LDURDi %26, -8 103 %29:fpr64 = FADDDrr killed %27, %19, implicit $fpcr 104 STURDi killed %29, %26, -8 105 106 %30:gpr64common = LDRXui %stack.1, 0 :: (dereferenceable load (s64)) 107 %31:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load (s64)) 108 109 %32:gpr32common = FCVTZSUWDr killed %31, implicit $fpcr 110 %34:gpr64all = IMPLICIT_DEF 111 %33:gpr64 = INSERT_SUBREG %34, %32, %subreg.sub_32 112 %35:gpr64 = SBFMXri killed %33, 61, 31 113 %36:fpr64 = LDRDroX killed %30, %35, 0, 0 114 %37:gpr64 = LDRXui %stack.2, 0 :: (dereferenceable load (s64)) 115 116 %38:gpr32common = ADDWri %32, 20, 0 117 %39:gpr64common = SMADDLrrr killed %38, %24, killed %37 118 STRDroX killed %36, killed %39, %35, 0, 0 119 120 %40:gpr64 = MOVi64imm 4617315517961601024 121 122 %42:gpr32 = LDRWui %stack.0, 0 :: (dereferenceable load (s64)) 123 $w0 = COPY %42 124 RET_ReallyLR implicit $w0 125 126... 127