[ARM] Fixup the creation of VPT blocks
[llvm-core.git] / test / CodeGen / AArch64 / taildup-inst-dup-loc.mir
blob5954801d9926dd9e8ca60e7af7646d2769f6fafc
1 # RUN: llc -mtriple aarch64 -run-pass=early-tailduplication -verify-machineinstrs %s -o - 2>&1 | FileCheck %s
2 ---
3 name:            pluto
4 tracksRegLiveness: true
5 body:             |
6   ; This test checks that the COPY3 and COPY4 copies are correctly placed in the bb.5 block,
7   ; instead of crashing.
9   ; CHECK-LABEL: name: pluto
10   ; CHECK: bb.0:
11   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
12   ; CHECK:   liveins: $x0
13   ; CHECK:   [[DEF:%[0-9]+]]:gpr32 = IMPLICIT_DEF
14   ; CHECK:   [[DEF1:%[0-9]+]]:gpr32common = IMPLICIT_DEF
15   ; CHECK:   [[DEF2:%[0-9]+]]:gpr64 = IMPLICIT_DEF
16   ; CHECK:   [[DEF3:%[0-9]+]]:gpr64common = IMPLICIT_DEF
17   ; CHECK:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
18   ; CHECK:   [[FMOVD0_:%[0-9]+]]:fpr64 = FMOVD0
19   ; CHECK:   TBNZW [[DEF]], 0, %bb.1
20   ; CHECK:   B %bb.2
21   ; CHECK: bb.1:
22   ; CHECK:   successors: %bb.9(0x80000000)
23   ; CHECK:   [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[DEF3]], 0 :: (load 8 from `i64* undef`)
24   ; CHECK:   B %bb.9
25   ; CHECK: bb.2:
26   ; CHECK:   successors: %bb.3(0x40000000), %bb.4(0x40000000)
27   ; CHECK:   $wzr = SUBSWri [[DEF1]], 19, 0, implicit-def $nzcv
28   ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv
29   ; CHECK:   TBNZW [[CSINCWr]], 0, %bb.3
30   ; CHECK:   B %bb.4
31   ; CHECK: bb.3:
32   ; CHECK:   successors: %bb.9(0x80000000)
33   ; CHECK:   [[SCVTFUXDri:%[0-9]+]]:fpr64 = SCVTFUXDri [[DEF2]]
34   ; CHECK:   [[COPY:%[0-9]+]]:gpr64 = COPY [[SCVTFUXDri]]
35   ; CHECK:   [[COPY1:%[0-9]+]]:fpr64 = COPY [[SCVTFUXDri]]
36   ; CHECK:   B %bb.9
37   ; CHECK: bb.4:
38   ; CHECK:   successors: %bb.5(0x40000000), %bb.8(0x40000000)
39   ; CHECK:   TBNZW [[DEF]], 0, %bb.5
40   ; CHECK:   B %bb.8
41   ; CHECK: bb.5:
42   ; CHECK:   successors: %bb.9(0x80000000)
43   ; CHECK:   [[COPY2:%[0-9]+]]:fpr64 = COPY [[DEF2]]
44   ; CHECK:   [[COPY3:%[0-9]+]]:gpr64 = COPY [[COPY2]]
45   ; CHECK:   [[COPY4:%[0-9]+]]:fpr64 = COPY [[DEF2]]
46   ; CHECK:   B %bb.9
47   ; CHECK: bb.8:
48   ; CHECK:   successors: %bb.9(0x80000000)
49   ; CHECK: bb.9:
50   ; CHECK:   [[PHI:%[0-9]+]]:gpr64 = PHI [[LDRXui]], %bb.1, [[FMOVD0_]], %bb.8, [[COPY]], %bb.3, [[COPY3]], %bb.5
51   ; CHECK:   ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
52   ; CHECK:   $d0 = COPY [[PHI]]
53   ; CHECK:   BL @pluto, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0
54   ; CHECK:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
55   ; CHECK:   $w0 = COPY [[MOVi32imm]]
56   ; CHECK:   RET_ReallyLR implicit $w0
58   bb.1:
59     successors: %bb.2(0x40000000), %bb.3(0x40000000)
60     liveins: $x0
62     %1:gpr32 = IMPLICIT_DEF
63     %2:gpr32common = IMPLICIT_DEF
64     %5:gpr64 = IMPLICIT_DEF
65     %9:gpr64common = IMPLICIT_DEF
66     %13:gpr32 = MOVi32imm 1
67     %14:fpr64 = FMOVD0
68     TBNZW %1, 0, %bb.2
69     B %bb.3
71   bb.2:
72     successors: %bb.8(0x80000000)
74     %8:gpr64 = LDRXui %9, 0 :: (load 8 from `i64* undef`)
75     B %bb.8
77   bb.3:
78     successors: %bb.4(0x40000000), %bb.5(0x40000000)
80     $wzr = SUBSWri %2, 19, 0, implicit-def $nzcv
81     %15:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv
82     TBNZW %15, 0, %bb.4
83     B %bb.5
85   bb.4:
86     successors: %bb.7(0x80000000)
88     %6:fpr64 = SCVTFUXDri %5
89     B %bb.7
91   bb.5:
92     successors: %bb.6(0x40000000), %bb.9(0x40000000)
94     TBNZW %1, 0, %bb.6
95     B %bb.9
97   bb.6:
98     successors: %bb.7(0x80000000)
101   bb.7:
102     successors: %bb.8(0x80000000)
104     %7:fpr64 = PHI %6, %bb.4, %5, %bb.6
106   bb.8:
107     successors: %bb.10(0x80000000)
109     %10:gpr64 = PHI %8, %bb.2, %7, %bb.7
110     B %bb.10
112   bb.9:
113     successors: %bb.10(0x80000000)
116   bb.10:
117     %11:gpr64 = PHI %10, %bb.8, %14, %bb.9
118     ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
119     $d0 = COPY %11
120     BL @pluto, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0
121     ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
122     $w0 = COPY %13
123     RET_ReallyLR implicit $w0