• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RUN: not --crash llc -mtriple=aarch64-- -run-pass=legalizer %s -o - 2>&1 | FileCheck %s
2
3# This is to demonstrate what kind of bugs we're missing w/o some kind
4# of validation for LegalizerInfo: G_INTTOPTR could only be legal /
5# could be legalized if its destination operand has a pointer type and
6# its source - a scalar type. This is reversed in this test and the
7# legalizer is expected to fail on it with an appropriate error
8# message. Prior to LegalizerInfo::verify AArch64 legalizer had a
9# subtle bug in its definition that caused it to accept the following
10# MIR as legal. Namely, it checked that type index 0 is either s64 or
11# p0 (in that order) and implicitly declared any type for type index 1
12# as legal. As LegalizerInfo::verify asserts on such a definition due
13# to type index 1 not being covered it forces to review the definition
14# and fix the mistake: check that type index 0 is p0 and type index 1
15# is s64 (in that order).
16
17# CHECK:  Bad machine code: inttoptr result type must be a pointer
18# CHECK: Bad machine code: inttoptr source type must not be a pointer
19# CHECK: LLVM ERROR: Found 2 machine code errors.
20
21---
22name:            broken
23alignment:       4
24tracksRegLiveness: true
25registers:
26  - { id: 0, class: _ }
27  - { id: 1, class: _ }
28body:             |
29  bb.1:
30    liveins: $x0
31
32    %0:_(p0) = COPY $x0
33    %1:_(s64) = G_INTTOPTR %0(p0)
34    $x0 = COPY %1(s64)
35    RET_ReallyLR implicit $x0
36
37...
38