[ARM] Split large truncating MVE stores
[llvm-complete.git] / test / CodeGen / MIR / AArch64 / mirCanonIdempotent.mir
blob3a32303dc52d2410ed0d9a924a65ee3f2d56be2a
1 # RUN: llc -mtriple=arm64-apple-ios11.0.0 -o - -verify-machineinstrs -run-pass mir-canonicalizer %s | FileCheck %s
2 # These Idempotent instructions are sorted alphabetically (based on after the '=')
3 # CHECK: %namedVReg4352:gpr64 = MOVi64imm 4617315517961601024
4 # CHECK-NEXT: %namedVReg4353:gpr32 = MOVi32imm 408
5 # CHECK-NEXT: %namedVReg4354:gpr32 = MOVi32imm 408
6 # CHECK-NEXT: %namedVReg4355:gpr64all = IMPLICIT_DEF
7 # CHECK-NEXT: %namedVReg4356:fpr64 = FMOVDi 20
8 # CHECK-NEXT: %namedVReg4357:fpr64 = FMOVDi 112
10 ...
11 ---
12 name: Proc8
13 stack:
14   - { id: 0, type: default, offset: 0, size: 4, alignment: 4,
15       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
16       local-offset: -4, debug-info-variable: '', debug-info-expression: '',
17       debug-info-location: '' }
18   - { id: 1, type: default, offset: 0, size: 8, alignment: 8,
19       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
20       local-offset: -16, debug-info-variable: '', debug-info-expression: '',
21       debug-info-location: '' }
22   - { id: 2, type: default, offset: 0, size: 8, alignment: 8,
23       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
24       local-offset: -24, debug-info-variable: '', debug-info-expression: '',
25       debug-info-location: '' }
26   - { id: 3, type: default, offset: 0, size: 8, alignment: 8,
27       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
28       local-offset: -32, debug-info-variable: '', debug-info-expression: '',
29       debug-info-location: '' }
30   - { id: 4, type: default, offset: 0, size: 8, alignment: 8,
31       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
32       local-offset: -40, debug-info-variable: '', debug-info-expression: '',
33       debug-info-location: '' }
34   - { id: 5, type: default, offset: 0, size: 8, alignment: 8,
35       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
36       local-offset: -48, debug-info-variable: '', debug-info-expression: '',
37       debug-info-location: '' }
38   - { id: 6, type: default, offset: 0, size: 8, alignment: 8,
39       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
40       local-offset: -56, debug-info-variable: '', debug-info-expression: '',
41       debug-info-location: '' }
42 constants:
43 body: |
44   bb.0:
45     liveins: $x0, $x1, $d0, $d1
47     %3:fpr64 = COPY $d1
48     %2:fpr64 = COPY $d0
49     %1:gpr64 = COPY $x1
50     %0:gpr64common = COPY $x0
51     STRXui %0, %stack.1, 0 :: (store 8)
52     STRXui %1, %stack.2, 0 :: (store 8)
53     STRDui %2, %stack.3, 0 :: (store 8)
54     STRDui %3, %stack.4, 0 :: (store 8)
56     %4:fpr64 = FMOVDi 20
57     %5:fpr64 = FADDDrr %2, killed %4
58     STRDui %5, %stack.5, 0 :: (store 8)
60     %6:gpr32 = FCVTZSUWDr %5
61     STRDroW %3, %0, killed %6, 1, 1
63     %7:gpr64common = LDRXui %stack.1, 0 :: (dereferenceable load 8)
64     %8:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load 8)
66     %9:gpr32common = FCVTZSUWDr killed %8
67     %10:fpr64 = LDRDroW %7, %9, 1, 1
69     %11:gpr32common = ADDWri %9, 1, 0
70     STRDroW killed %10, %7, killed %11, 1, 1
72     %12:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load 8)
73     %13:gpr64common = LDRXui %stack.1, 0 :: (dereferenceable load 8)
75     %14:gpr32common = FCVTZSUWDr %12
76     %15:gpr32common = ADDWri killed %14, 30, 0
77     STRDroW %12, killed %13, killed %15, 1, 1
79     %16:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load 8)
80     STRDui killed %16, %stack.6, 0 :: (store 8)
82     %19:fpr64 = FMOVDi 112
83     %46:gpr32 = MOVi32imm 408
84     %43:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load 8)
85     %44:gpr64 = LDRXui %stack.2, 0 :: (dereferenceable load 8)
87     %45:gpr32 = FCVTZSUWDr %43
88     %47:gpr64common = SMADDLrrr killed %45, %46, killed %44
89     %48:fpr64 = LDRDui %stack.6, 0 :: (dereferenceable load 8)
91     %49:gpr32 = FCVTZSUWDr killed %48
92     STRDroW %43, killed %47, killed %49, 1, 1
94     %21:gpr64 = LDRXui %stack.2, 0 :: (dereferenceable load 8)
95     %22:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load 8)
97     %23:gpr32 = FCVTZSUWDr killed %22
98     %24:gpr32 = MOVi32imm 408
99     %25:gpr64common = SMADDLrrr %23, %24, killed %21
100     %26:gpr64sp = ADDXrx killed %25, %23, 51
101     %27:fpr64 = LDURDi %26, -8
102     %29:fpr64 = FADDDrr killed %27, %19
103     STURDi killed %29, %26, -8
105     %30:gpr64common = LDRXui %stack.1, 0 :: (dereferenceable load 8)
106     %31:fpr64 = LDRDui %stack.5, 0 :: (dereferenceable load 8)
108     %32:gpr32common = FCVTZSUWDr killed %31
109     %34:gpr64all = IMPLICIT_DEF
110     %33:gpr64 = INSERT_SUBREG %34, %32, %subreg.sub_32
111     %35:gpr64 = SBFMXri killed %33, 61, 31
112     %36:fpr64 = LDRDroX killed %30, %35, 0, 0
113     %37:gpr64 = LDRXui %stack.2, 0 :: (dereferenceable load 8)
115     %38:gpr32common = ADDWri %32, 20, 0
116     %39:gpr64common = SMADDLrrr killed %38, %24, killed %37
117     STRDroX killed %36, killed %39, %35, 0, 0
119     %40:gpr64 = MOVi64imm 4617315517961601024
121     %42:gpr32 = LDRWui %stack.0, 0 :: (dereferenceable load 8)
122     $w0 = COPY %42
123     RET_ReallyLR implicit $w0