1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00
llvm-mirror/test/MachineVerifier/test_g_ptrmask.mir
Matt Arsenault 0d431b73a3 GlobalISel: Merge G_PTR_MASK with llvm.ptrmask intrinsic
Confusingly, these were unrelated and had different semantics. The
G_PTR_MASK instruction predates the llvm.ptrmask intrinsic, but has a
different format. G_PTR_MASK only allows clearing the low bits of a
pointer, and only a constant number of bits. The ptrmask intrinsic
allows an arbitrary mask. Replace G_PTR_MASK to match the intrinsic.

Only selects the cases that look like the old instruction. More work
is needed to select the general case. Also new legalization code is
still needed to deal with the case where the incoming mask size does
not match the pointer size, which has a specified behavior in the
langref.
2020-05-26 11:48:13 -04:00

55 lines
1.8 KiB
YAML

# REQUIRES: aarch64-registered-target
# RUN: not --crash llc -o - -march=arm64 -run-pass=none -verify-machineinstrs %s 2>&1 | FileCheck %s
---
name: test_ptr_mask
tracksRegLiveness: true
liveins:
body: |
bb.0:
%0:_(p0) = G_IMPLICIT_DEF
%1:_(p0) = G_IMPLICIT_DEF
%2:_(s64) = G_IMPLICIT_DEF
; CHECK: Bad machine code: Type mismatch in generic instruction
; CHECK: Bad machine code: ptrmask result type must be a pointer
%3:_(s64) = G_PTRMASK %0, %2
; CHECK: Bad machine code: Type mismatch in generic instruction
%4:_(p0) = G_PTRMASK %2, %2
; CHECK: Bad machine code: ptrmask mask type must be an integer
%5:_(p0) = G_PTRMASK %0, %0
%6:_(<2 x p0>) = G_IMPLICIT_DEF
%7:_(<2 x s64>) = G_IMPLICIT_DEF
; CHECK: Bad machine code: Type mismatch in generic instruction
; CHECK: Bad machine code: ptrmask result type must be a pointer
%8:_(<2 x s64>) = G_PTRMASK %6, %7
; CHECK: Bad machine code: Type mismatch in generic instruction
%9:_(<2 x p0>) = G_PTRMASK %7, %7
; CHECK: Bad machine code: Type mismatch in generic instruction
; CHECK: Bad machine code: ptrmask mask type must be an integer
; CHECK: Bad machine code: operand types must be all-vector or all-scalar
%10:_(<2 x p0>) = G_PTRMASK %0, %0
; CHECK: Bad machine code: Type mismatch in generic instruction
%11:_(p0) = G_PTRMASK %6, %2
; CHECK: Bad machine code: operand types must be all-vector or all-scalar
%12:_(p0) = G_PTRMASK %0, %7
; CHECK: Bad machine code: operand types must be all-vector or all-scalar
%13:_(<2 x p0>) = G_PTRMASK %6, %2
%14:_(<4 x p0>) = G_IMPLICIT_DEF
; CHECK: Bad machine code: operand types must preserve number of vector elements
%15:_(<4 x p0>) = G_PTRMASK %14, %8
...