xref: /llvm-project/llvm/test/CodeGen/X86/GlobalISel/legalize-select.mir (revision ef35da825f38a86e4621c13a2898d561da88991c)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2# RUN: llc -mtriple=i386-linux-gnu -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=CHECK,X86
3# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=CHECK,X64
4
5# test select
6
7...
8---
9name:            test_selectp0
10body:             |
11  bb.1:
12    ; CHECK-LABEL: name: test_selectp0
13    ; CHECK: [[DEF:%[0-9]+]]:_(p0) = IMPLICIT_DEF
14    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(p0) = IMPLICIT_DEF
15    ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
16    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
17    ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(p0) = G_SELECT [[ZEXT]](s32), [[DEF1]], [[DEF]]
18    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[SELECT]](p0)
19    ; CHECK-NEXT: RET 0, implicit [[COPY]](p0)
20    %0:_(p0) = IMPLICIT_DEF
21    %1:_(p0) = IMPLICIT_DEF
22    %2:_(s1) = IMPLICIT_DEF
23    %3:_(p0) = G_SELECT %2, %1, %0
24    %4:_(p0) = COPY %3(p0)
25    RET 0, implicit %4
26
27...
28---
29name:            test_select64
30body:             |
31  bb.1:
32    ; X86-LABEL: name: test_select64
33    ; X86: [[DEF:%[0-9]+]]:_(s64) = IMPLICIT_DEF
34    ; X86-NEXT: [[DEF1:%[0-9]+]]:_(s64) = IMPLICIT_DEF
35    ; X86-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
36    ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF1]](s64)
37    ; X86-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](s64)
38    ; X86-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
39    ; X86-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT]](s32), [[UV]], [[UV2]]
40    ; X86-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT]](s32), [[UV1]], [[UV3]]
41    ; X86-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
42    ; X86-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[MV]](s64)
43    ; X86-NEXT: RET 0, implicit [[COPY]](s64)
44    ;
45    ; X64-LABEL: name: test_select64
46    ; X64: [[DEF:%[0-9]+]]:_(s64) = IMPLICIT_DEF
47    ; X64-NEXT: [[DEF1:%[0-9]+]]:_(s64) = IMPLICIT_DEF
48    ; X64-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
49    ; X64-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
50    ; X64-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ZEXT]](s32), [[DEF1]], [[DEF]]
51    ; X64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[SELECT]](s64)
52    ; X64-NEXT: RET 0, implicit [[COPY]](s64)
53    %0:_(s64) = IMPLICIT_DEF
54    %1:_(s64) = IMPLICIT_DEF
55    %2:_(s1) = IMPLICIT_DEF
56    %3:_(s64) = G_SELECT %2, %1, %0
57    %4:_(s64) = COPY %3(s64)
58    RET 0, implicit %4
59
60...
61---
62name:            test_select32
63body:             |
64  bb.1:
65    ; CHECK-LABEL: name: test_select32
66    ; CHECK: [[DEF:%[0-9]+]]:_(s32) = IMPLICIT_DEF
67    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = IMPLICIT_DEF
68    ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
69    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
70    ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT]](s32), [[DEF1]], [[DEF]]
71    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32)
72    ; CHECK-NEXT: RET 0, implicit [[COPY]](s32)
73    %0:_(s32) = IMPLICIT_DEF
74    %1:_(s32) = IMPLICIT_DEF
75    %2:_(s1) = IMPLICIT_DEF
76    %3:_(s32) = G_SELECT %2, %1, %0
77    %4:_(s32) = COPY %3(s32)
78    RET 0, implicit %4
79
80...
81---
82name:            test_select16
83body:             |
84  bb.1:
85    ; CHECK-LABEL: name: test_select16
86    ; CHECK: [[DEF:%[0-9]+]]:_(s16) = IMPLICIT_DEF
87    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s16) = IMPLICIT_DEF
88    ; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
89    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
90    ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ZEXT]](s32), [[DEF1]], [[DEF]]
91    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY [[SELECT]](s16)
92    ; CHECK-NEXT: RET 0, implicit [[COPY]](s16)
93    %0:_(s16) = IMPLICIT_DEF
94    %1:_(s16) = IMPLICIT_DEF
95    %2:_(s1) = IMPLICIT_DEF
96    %3:_(s16) = G_SELECT %2, %1, %0
97    %4:_(s16) = COPY %3(s16)
98    RET 0, implicit %4
99
100...
101---
102name:            test_select8
103body:             |
104  bb.1:
105    ; X86-LABEL: name: test_select8
106    ; X86: [[DEF:%[0-9]+]]:_(s8) = IMPLICIT_DEF
107    ; X86-NEXT: [[DEF1:%[0-9]+]]:_(s8) = IMPLICIT_DEF
108    ; X86-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
109    ; X86-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
110    ; X86-NEXT: [[SELECT:%[0-9]+]]:_(s8) = G_SELECT [[ZEXT]](s32), [[DEF1]], [[DEF]]
111    ; X86-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY [[SELECT]](s8)
112    ; X86-NEXT: RET 0, implicit [[COPY]](s8)
113    ;
114    ; X64-LABEL: name: test_select8
115    ; X64: [[DEF:%[0-9]+]]:_(s8) = IMPLICIT_DEF
116    ; X64-NEXT: [[DEF1:%[0-9]+]]:_(s8) = IMPLICIT_DEF
117    ; X64-NEXT: [[DEF2:%[0-9]+]]:_(s1) = IMPLICIT_DEF
118    ; X64-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[DEF1]](s8)
119    ; X64-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[DEF]](s8)
120    ; X64-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[DEF2]](s1)
121    ; X64-NEXT: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ZEXT]](s32), [[ANYEXT]], [[ANYEXT1]]
122    ; X64-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SELECT]](s16)
123    ; X64-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY [[TRUNC]](s8)
124    ; X64-NEXT: RET 0, implicit [[COPY]](s8)
125    %0:_(s8) = IMPLICIT_DEF
126    %1:_(s8) = IMPLICIT_DEF
127    %2:_(s1) = IMPLICIT_DEF
128    %3:_(s8) = G_SELECT %2, %1, %0
129    %4:_(s8) = COPY %3(s8)
130    RET 0, implicit %4
131