[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / postlegalizer-combiner-redundant-sextinreg.mir
blob8e9642ab3e3b2f64885d024bc324aaa1d081a0c7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
4 ...
5 ---
6 name:            sextload
7 legalized:       true
8 tracksRegLiveness: true
9 body: |
10   bb.0.entry:
11     liveins: $x0
13     ; CHECK-LABEL: name: sextload
14     ; CHECK: liveins: $x0
15     ; CHECK: %x0:_(p0) = COPY $x0
16     ; CHECK: %sextload:_(s32) = G_SEXTLOAD %x0(p0) :: (load (s16))
17     ; CHECK: $w0 = COPY %sextload(s32)
18     %x0:_(p0) = COPY $x0
19     %sextload:_(s32) = G_SEXTLOAD %x0:_(p0) :: (load (s16))
20     %sext_inreg:_(s32) = G_SEXT_INREG %sextload:_(s32), 24
21     $w0 = COPY %sext_inreg(s32)
22 ...
23 ---
24 name:            assert_sext
25 legalized:       true
26 tracksRegLiveness: true
27 body: |
28   bb.0.entry:
29     liveins: $w0
30     ; The G_ASSERT_SEXT says we already sign extended from 24 bits, so the
31     ; G_SEXT_INREG is not necessary.
33     ; CHECK-LABEL: name: assert_sext
34     ; CHECK: liveins: $w0
35     ; CHECK: %w0:_(s32) = COPY $w0
36     ; CHECK: %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
37     ; CHECK: $w0 = COPY %assert_sext(s32)
38     %w0:_(s32) = COPY $w0
39     %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
40     %sext_inreg:_(s32) = G_SEXT_INREG %assert_sext:_(s32), 24
41     $w0 = COPY %sext_inreg(s32)
42 ...
43 ---
44 name:            assert_sext_greater_width
45 legalized:       true
46 tracksRegLiveness: true
47 body: |
48   bb.0.entry:
49     liveins: $w0
50     ; The G_ASSERT_SEXT is from a wider width than the G_SEXT_INREG, so we
51     ; can't eliminate it.
53     ; CHECK-LABEL: name: assert_sext_greater_width
54     ; CHECK: liveins: $w0
55     ; CHECK: %w0:_(s32) = COPY $w0
56     ; CHECK: %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
57     ; CHECK: %sext_inreg:_(s32) = G_SEXT_INREG %assert_sext, 12
58     ; CHECK: $w0 = COPY %sext_inreg(s32)
59     %w0:_(s32) = COPY $w0
60     %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 24
61     %sext_inreg:_(s32) = G_SEXT_INREG %assert_sext:_(s32), 12
62     $w0 = COPY %sext_inreg(s32)
63 ...
64 ---
65 name:            assert_sext_smaller_width
66 legalized:       true
67 tracksRegLiveness: true
68 body: |
69   bb.0.entry:
70     liveins: $w0
71     ; The G_ASSERT_SEXT is from a smaller width, so the G_SEXT_INREG is not
72     ; necessary.
74     ; CHECK-LABEL: name: assert_sext_smaller_width
75     ; CHECK: liveins: $w0
76     ; CHECK: %w0:_(s32) = COPY $w0
77     ; CHECK: %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 8
78     ; CHECK: $w0 = COPY %assert_sext(s32)
79     %w0:_(s32) = COPY $w0
80     %assert_sext:_(s32) = G_ASSERT_SEXT %w0, 8
81     %sext_inreg:_(s32) = G_SEXT_INREG %assert_sext:_(s32), 12
82     $w0 = COPY %sext_inreg(s32)
83 ...