xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-abs.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s
4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s
5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s
6
7---
8name: smax_neg_abs_pattern_s32_ss
9legalized: true
10regBankSelected: true
11tracksRegLiveness: true
12
13body: |
14  bb.0:
15    liveins: $sgpr0
16
17    ; GFX6-LABEL: name: smax_neg_abs_pattern_s32_ss
18    ; GFX6: liveins: $sgpr0
19    ; GFX6-NEXT: {{  $}}
20    ; GFX6-NEXT: %src0:sreg_32 = COPY $sgpr0
21    ; GFX6-NEXT: %smax:sreg_32 = S_ABS_I32 %src0, implicit-def dead $scc
22    ; GFX6-NEXT: S_ENDPGM 0, implicit %smax
23    ;
24    ; GFX9-LABEL: name: smax_neg_abs_pattern_s32_ss
25    ; GFX9: liveins: $sgpr0
26    ; GFX9-NEXT: {{  $}}
27    ; GFX9-NEXT: %src0:sreg_32 = COPY $sgpr0
28    ; GFX9-NEXT: %smax:sreg_32 = S_ABS_I32 %src0, implicit-def dead $scc
29    ; GFX9-NEXT: S_ENDPGM 0, implicit %smax
30    %src0:sgpr(s32) = COPY $sgpr0
31    %zero:sgpr(s32) = G_CONSTANT i32 0
32    %ineg:sgpr(s32) = G_SUB %zero, %src0
33    %smax:sgpr(s32) = G_SMAX %src0, %ineg
34    S_ENDPGM 0, implicit %smax
35...
36
37---
38name: smax_neg_abs_pattern_s32_ss_commute
39legalized: true
40regBankSelected: true
41tracksRegLiveness: true
42
43body: |
44  bb.0:
45    liveins: $sgpr0
46
47    ; GFX6-LABEL: name: smax_neg_abs_pattern_s32_ss_commute
48    ; GFX6: liveins: $sgpr0
49    ; GFX6-NEXT: {{  $}}
50    ; GFX6-NEXT: %src0:sreg_32 = COPY $sgpr0
51    ; GFX6-NEXT: %smax:sreg_32 = S_ABS_I32 %src0, implicit-def dead $scc
52    ; GFX6-NEXT: S_ENDPGM 0, implicit %smax
53    ;
54    ; GFX9-LABEL: name: smax_neg_abs_pattern_s32_ss_commute
55    ; GFX9: liveins: $sgpr0
56    ; GFX9-NEXT: {{  $}}
57    ; GFX9-NEXT: %src0:sreg_32 = COPY $sgpr0
58    ; GFX9-NEXT: %smax:sreg_32 = S_ABS_I32 %src0, implicit-def dead $scc
59    ; GFX9-NEXT: S_ENDPGM 0, implicit %smax
60    %src0:sgpr(s32) = COPY $sgpr0
61    %zero:sgpr(s32) = G_CONSTANT i32 0
62    %ineg:sgpr(s32) = G_SUB %zero, %src0
63    %smax:sgpr(s32) = G_SMAX %ineg, %src0
64    S_ENDPGM 0, implicit %smax
65...
66
67---
68name: smax_neg_abs_pattern_s32_vv
69legalized: true
70regBankSelected: true
71tracksRegLiveness: true
72
73body: |
74  bb.0:
75    liveins: $vgpr0
76
77    ; GFX6-LABEL: name: smax_neg_abs_pattern_s32_vv
78    ; GFX6: liveins: $vgpr0
79    ; GFX6-NEXT: {{  $}}
80    ; GFX6-NEXT: %src0:vgpr_32 = COPY $vgpr0
81    ; GFX6-NEXT: %zero:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
82    ; GFX6-NEXT: %ineg:vgpr_32, dead %4:sreg_64 = V_SUB_CO_U32_e64 %zero, %src0, 0, implicit $exec
83    ; GFX6-NEXT: %smax:vgpr_32 = V_MAX_I32_e64 %src0, %ineg, implicit $exec
84    ; GFX6-NEXT: S_ENDPGM 0, implicit %smax
85    ;
86    ; GFX9-LABEL: name: smax_neg_abs_pattern_s32_vv
87    ; GFX9: liveins: $vgpr0
88    ; GFX9-NEXT: {{  $}}
89    ; GFX9-NEXT: %src0:vgpr_32 = COPY $vgpr0
90    ; GFX9-NEXT: %zero:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
91    ; GFX9-NEXT: %ineg:vgpr_32 = V_SUB_U32_e64 %zero, %src0, 0, implicit $exec
92    ; GFX9-NEXT: %smax:vgpr_32 = V_MAX_I32_e64 %src0, %ineg, implicit $exec
93    ; GFX9-NEXT: S_ENDPGM 0, implicit %smax
94    %src0:vgpr(s32) = COPY $vgpr0
95    %zero:vgpr(s32) = G_CONSTANT i32 0
96    %ineg:vgpr(s32) = G_SUB %zero, %src0
97    %smax:vgpr(s32) = G_SMAX %src0, %ineg
98    S_ENDPGM 0, implicit %smax
99...
100
101# FIXME: Violates constant bus restriction
102# ---
103# name: smax_neg_abs_pattern_s32_vs
104# legalized: true
105# regBankSelected: true
106
107# body: |
108#   bb.0:
109#     liveins: $sgpr0
110
111#     %src0:sgpr(s32) = COPY $sgpr0
112#     %zero:sgpr(s32) = G_CONSTANT i32 0
113#     %ineg:sgpr(s32) = G_SUB %zero, %src0
114#     %smax:vgpr(s32) = G_SMAX %src0, %ineg
115#     S_ENDPGM 0, implicit %smax
116# ...
117