# 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)
...