mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
0d431b73a3
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.
55 lines
1.8 KiB
YAML
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
|
|
|
|
...
|