206 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -o - %s -mtriple arm64e-apple-darwin -verify-machineinstrs \3# RUN: -stop-after=finalize-isel -start-before=finalize-isel | FileCheck %s4# RUN: llc -o - %s -mtriple aarch64-linux-gnu -mattr=+pauth -verify-machineinstrs \5# RUN: -stop-after=finalize-isel -start-before=finalize-isel | FileCheck %s6 7# This MIR-based test contains several test cases that are hard to implement8# via an LLVM IR input. Most other test cases are in ptrauth-isel.ll file.9 10--- |11 @globalvar = dso_local global i64 012 13 define i64 @movk_correct_blend(i64 %a, i64 %b) {14 entry:15 ret i64 016 }17 18 define i64 @movk_wrong_shift_amount(i64 %a, i64 %b) {19 entry:20 ret i64 021 }22 23 define i64 @movk_non_immediate_operand(i64 %a, i64 %b) {24 entry:25 ret i64 026 }27 28 define i64 @movi64imm_immediate_operand(i64 %a) {29 entry:30 ret i64 031 }32 33 define i64 @movi64imm_non_immediate_operand(i64 %a) {34 entry:35 ret i64 036 }37 38 define i64 @movi32imm_immediate_operand(i64 %a) {39 entry:40 ret i64 041 }42 43 define i64 @movi32imm_non_immediate_operand(i64 %a) {44 entry:45 ret i64 046 }47...48---49name: movk_correct_blend50tracksRegLiveness: true51body: |52 bb.0.entry:53 liveins: $x0, $x154 55 ; CHECK-LABEL: name: movk_correct_blend56 ; CHECK: liveins: $x0, $x157 ; CHECK-NEXT: {{ $}}58 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x059 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x160 ; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 4861 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64noip = COPY [[COPY1]]62 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed [[COPY2]], implicit-def dead $x16, implicit-def dead $x1763 ; CHECK-NEXT: $x0 = COPY [[PAC]]64 ; CHECK-NEXT: RET_ReallyLR implicit $x065 %0:gpr64 = COPY $x066 %1:gpr64 = COPY $x167 %2:gpr64noip = MOVKXi %1, 42, 4868 %3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x1769 $x0 = COPY %370 RET_ReallyLR implicit $x071...72---73name: movk_wrong_shift_amount74tracksRegLiveness: true75body: |76 bb.0.entry:77 liveins: $x0, $x178 79 ; CHECK-LABEL: name: movk_wrong_shift_amount80 ; CHECK: liveins: $x0, $x181 ; CHECK-NEXT: {{ $}}82 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x083 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x184 ; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 085 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVKXi]], implicit-def dead $x16, implicit-def dead $x1786 ; CHECK-NEXT: $x0 = COPY [[PAC]]87 ; CHECK-NEXT: RET_ReallyLR implicit $x088 %0:gpr64 = COPY $x089 %1:gpr64 = COPY $x190 %2:gpr64noip = MOVKXi %1, 42, 091 %3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x1792 $x0 = COPY %393 RET_ReallyLR implicit $x094...95---96name: movk_non_immediate_operand97tracksRegLiveness: true98body: |99 bb.0.entry:100 liveins: $x0, $x1101 102 ; CHECK-LABEL: name: movk_non_immediate_operand103 ; CHECK: liveins: $x0, $x1104 ; CHECK-NEXT: {{ $}}105 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0106 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1107 ; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], target-flags(aarch64-pageoff, aarch64-nc) @globalvar, 48108 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVKXi]], implicit-def dead $x16, implicit-def dead $x17109 ; CHECK-NEXT: $x0 = COPY [[PAC]]110 ; CHECK-NEXT: RET_ReallyLR implicit $x0111 %0:gpr64 = COPY $x0112 %1:gpr64 = COPY $x1113 %2:gpr64noip = MOVKXi %1, target-flags(aarch64-pageoff, aarch64-nc) @globalvar, 48114 %3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17115 $x0 = COPY %3116 RET_ReallyLR implicit $x0117...118---119name: movi64imm_immediate_operand120tracksRegLiveness: true121body: |122 bb.0.entry:123 liveins: $x0, $x1124 125 ; CHECK-LABEL: name: movi64imm_immediate_operand126 ; CHECK: liveins: $x0, $x1127 ; CHECK-NEXT: {{ $}}128 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0129 ; CHECK-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm 42130 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17131 ; CHECK-NEXT: $x0 = COPY [[PAC]]132 ; CHECK-NEXT: RET_ReallyLR implicit $x0133 %0:gpr64 = COPY $x0134 %1:gpr64noip = MOVi64imm 42135 %2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x16, implicit-def dead $x17136 $x0 = COPY %2137 RET_ReallyLR implicit $x0138...139---140name: movi64imm_non_immediate_operand141tracksRegLiveness: true142body: |143 bb.0.entry:144 liveins: $x0, $x1145 146 ; CHECK-LABEL: name: movi64imm_non_immediate_operand147 ; CHECK: liveins: $x0, $x1148 ; CHECK-NEXT: {{ $}}149 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0150 ; CHECK-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar151 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVi64imm]], implicit-def dead $x16, implicit-def dead $x17152 ; CHECK-NEXT: $x0 = COPY [[PAC]]153 ; CHECK-NEXT: RET_ReallyLR implicit $x0154 %0:gpr64 = COPY $x0155 %1:gpr64noip = MOVi64imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar156 %2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x16, implicit-def dead $x17157 $x0 = COPY %2158 RET_ReallyLR implicit $x0159...160---161name: movi32imm_immediate_operand162tracksRegLiveness: true163body: |164 bb.0.entry:165 liveins: $x0, $x1166 167 ; CHECK-LABEL: name: movi32imm_immediate_operand168 ; CHECK: liveins: $x0, $x1169 ; CHECK-NEXT: {{ $}}170 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0171 ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42172 ; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32173 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17174 ; CHECK-NEXT: $x0 = COPY [[PAC]]175 ; CHECK-NEXT: RET_ReallyLR implicit $x0176 %0:gpr64 = COPY $x0177 %1:gpr32 = MOVi32imm 42178 %2:gpr64noip = SUBREG_TO_REG 0, killed %1, %subreg.sub_32179 %3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17180 $x0 = COPY %3181 RET_ReallyLR implicit $x0182...183---184name: movi32imm_non_immediate_operand185tracksRegLiveness: true186body: |187 bb.0.entry:188 liveins: $x0, $x1189 190 ; CHECK-LABEL: name: movi32imm_non_immediate_operand191 ; CHECK: liveins: $x0, $x1192 ; CHECK-NEXT: {{ $}}193 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0194 ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar195 ; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32196 ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[SUBREG_TO_REG]], implicit-def dead $x16, implicit-def dead $x17197 ; CHECK-NEXT: $x0 = COPY [[PAC]]198 ; CHECK-NEXT: RET_ReallyLR implicit $x0199 %0:gpr64 = COPY $x0200 %1:gpr32 = MOVi32imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar201 %2:gpr64noip = SUBREG_TO_REG 0, killed %1, %subreg.sub_32202 %3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17203 $x0 = COPY %3204 RET_ReallyLR implicit $x0205...206