84 lines
2.5 KiB
Text
84 lines
2.5 KiB
Text
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||
|
# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
|
||
|
|
||
|
...
|
||
|
---
|
||
|
name: sextload
|
||
|
legalized: true
|
||
|
tracksRegLiveness: true
|
||
|
body: |
|
||
|
bb.0.entry:
|
||
|
liveins: $x0
|
||
|
|
||
|
; CHECK-LABEL: name: sextload
|
||
|
; CHECK: liveins: $x0
|
||
|
; CHECK: %x0:_(p0) = COPY $x0
|
||
|
; CHECK: %sextload:_(s32) = G_SEXTLOAD %x0(p0) :: (load (s16))
|
||
|
; CHECK: $w0 = COPY %sextload(s32)
|
||
|
%x0:_(p0) = COPY $x0
|
||
|
%sextload:_(s32) = G_SEXTLOAD %x0:_(p0) :: (load (s16))
|
||
|
%sext_inreg:_(s32) = G_SEXT_INREG %sextload:_(s32), 24
|
||
|
$w0 = COPY %sext_inreg(s32)
|
||
|
...
|
||
|
---
|
||
|
name: assert_sext
|
||
|
legalized: true
|
||
|
tracksRegLiveness: true
|
||
|
body: |
|
||
|
bb.0.entry:
|
||
|
liveins: $w0
|
||
|
; The G_ASSERT_SEXT says we already sign extended from 24 bits, so the
|
||
|
; G_SEXT_INREG is not necessary.
|
||
|
|
||
|
; CHECK-LABEL: name: assert_sext
|
||
|
; CHECK: liveins: $w0
|
||
|
; CHECK: %w0:_(s32) = COPY $w0
|
||
|
; CHECK: %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
|
||
|
; CHECK: $w0 = COPY %assert_sext(s32)
|
||
|
%w0:_(s32) = COPY $w0
|
||
|
%assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
|
||
|
%sext_inreg:_(s32) = G_SEXT_INREG %assert_sext:_(s32), 24
|
||
|
$w0 = COPY %sext_inreg(s32)
|
||
|
...
|
||
|
---
|
||
|
name: assert_sext_greater_width
|
||
|
legalized: true
|
||
|
tracksRegLiveness: true
|
||
|
body: |
|
||
|
bb.0.entry:
|
||
|
liveins: $w0
|
||
|
; The G_ASSERT_SEXT is from a wider width than the G_SEXT_INREG, so we
|
||
|
; can't eliminate it.
|
||
|
|
||
|
; CHECK-LABEL: name: assert_sext_greater_width
|
||
|
; CHECK: liveins: $w0
|
||
|
; CHECK: %w0:_(s32) = COPY $w0
|
||
|
; CHECK: %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
|
||
|
; CHECK: %sext_inreg:_(s32) = G_SEXT_INREG %assert_sext, 12
|
||
|
; CHECK: $w0 = COPY %sext_inreg(s32)
|
||
|
%w0:_(s32) = COPY $w0
|
||
|
%assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
|
||
|
%sext_inreg:_(s32) = G_SEXT_INREG %assert_sext:_(s32), 12
|
||
|
$w0 = COPY %sext_inreg(s32)
|
||
|
...
|
||
|
---
|
||
|
name: assert_sext_smaller_width
|
||
|
legalized: true
|
||
|
tracksRegLiveness: true
|
||
|
body: |
|
||
|
bb.0.entry:
|
||
|
liveins: $w0
|
||
|
; The G_ASSERT_SEXT is from a smaller width, so the G_SEXT_INREG is not
|
||
|
; necessary.
|
||
|
|
||
|
; CHECK-LABEL: name: assert_sext_smaller_width
|
||
|
; CHECK: liveins: $w0
|
||
|
; CHECK: %w0:_(s32) = COPY $w0
|
||
|
; CHECK: %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 8
|
||
|
; CHECK: $w0 = COPY %assert_sext(s32)
|
||
|
%w0:_(s32) = COPY $w0
|
||
|
%assert_sext:_(s32) = G_ASSERT_SEXT %w0, 8
|
||
|
%sext_inreg:_(s32) = G_SEXT_INREG %assert_sext:_(s32), 12
|
||
|
$w0 = COPY %sext_inreg(s32)
|
||
|
...
|