Skip to content

Commit 614e875

Browse files
committed
[X86][GISel] Support G_FREEZE and G_CONSTANT_FOLD_BARRIER selection
- Teach the X86 GlobalISel selector to lower G_FREEZE as a plain COPY, since it has no side effects after legalization. - Add tests to verify selection of G_FREEZE -> COPY and missing coverage for G_CONSTANT_FOLD_BARRIER -> COPY. - Rename legalize-g_implicit_def.mir to legalize-undef-vec-scaling.mir to align with existing naming conventions.
1 parent 381281a commit 614e875

File tree

8 files changed

+247
-0
lines changed

8 files changed

+247
-0
lines changed

llvm/lib/Target/X86/GISel/X86InstructionSelector.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ bool X86InstructionSelector::select(MachineInstr &I) {
407407
case TargetOpcode::G_TRUNC:
408408
return selectTruncOrPtrToInt(I, MRI, MF);
409409
case TargetOpcode::G_INTTOPTR:
410+
case TargetOpcode::G_FREEZE:
410411
return selectCopy(I, MRI);
411412
case TargetOpcode::G_ZEXT:
412413
return selectZext(I, MRI, MF);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2+
3+
---
4+
name: select_cfb_vec256
5+
legalized: true
6+
regBankSelected: true
7+
registers:
8+
- { id: 0, class: vecr, preferred-register: '', flags: [ ] }
9+
- { id: 1, class: vecr, preferred-register: '', flags: [ ] }
10+
body: |
11+
bb.0:
12+
liveins: $ymm0
13+
14+
; CHECK-LABEL: name: select_cfb_vec256
15+
; CHECK: [[COPY:%[0-9]+]]:vr256 = COPY $ymm0
16+
; CHECK-NOT: G_CONSTANT_FOLD_BARRIER
17+
; CHECK-NEXT: $ymm1 = COPY [[COPY]]
18+
; CHECK-NEXT: RET 0, implicit $ymm1
19+
%0:vecr(<8 x s32>) = COPY $ymm0
20+
%1:vecr(<8 x s32>) = G_CONSTANT_FOLD_BARRIER %0
21+
$ymm1 = COPY %1(<8 x s32>)
22+
RET 0, implicit $ymm1
23+
...
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2+
3+
---
4+
name: select_cfb_vec512
5+
legalized: true
6+
regBankSelected: true
7+
registers:
8+
- { id: 0, class: vecr, preferred-register: '', flags: [ ] }
9+
- { id: 1, class: vecr, preferred-register: '', flags: [ ] }
10+
body: |
11+
bb.0:
12+
liveins: $zmm0
13+
14+
; CHECK-LABEL: name: select_cfb_vec512
15+
; CHECK: [[COPY:%[0-9]+]]:vr512 = COPY $zmm0
16+
; CHECK-NOT: G_CONSTANT_FOLD_BARRIER
17+
; CHECK-NEXT: $zmm1 = COPY [[COPY]]
18+
; CHECK-NEXT: RET 0, implicit $zmm1
19+
%0:vecr(<8 x s64>) = COPY $zmm0
20+
%1:vecr(<8 x s64>) = G_CONSTANT_FOLD_BARRIER %0
21+
$zmm1 = COPY %1(<8 x s64>)
22+
RET 0, implicit $zmm1
23+
...
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2+
3+
4+
---
5+
name: select_cfb_scalar_s32
6+
legalized: true
7+
regBankSelected: true
8+
registers:
9+
- { id: 0, class: gpr, preferred-register: '', flags: [ ] }
10+
- { id: 1, class: gpr, preferred-register: '', flags: [ ] }
11+
liveins:
12+
fixedStack:
13+
stack:
14+
constants:
15+
body: |
16+
bb.0:
17+
liveins: $edi
18+
19+
; CHECK-LABEL: name: select_cfb_scalar_s32
20+
; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $edi
21+
; CHECK-NOT: G_CONSTANT_FOLD_BARRIER
22+
; CHECK-NEXT: $eax = COPY [[COPY]]
23+
; CHECK-NEXT: RET 0, implicit $eax
24+
%0:gpr(s32) = COPY $edi
25+
%1:gpr(s32) = G_CONSTANT_FOLD_BARRIER %0
26+
$eax = COPY %1(s32)
27+
RET 0, implicit $eax
28+
...
29+
30+
---
31+
name: select_cfb_scalar_s64
32+
legalized: true
33+
regBankSelected: true
34+
registers:
35+
- { id: 0, class: gpr, preferred-register: '', flags: [ ] }
36+
- { id: 1, class: gpr, preferred-register: '', flags: [ ] }
37+
liveins:
38+
fixedStack:
39+
stack:
40+
constants:
41+
body: |
42+
bb.0:
43+
liveins: $rdi
44+
45+
; CHECK-LABEL: name: select_cfb_scalar_s64
46+
; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
47+
; CHECK-NOT: G_CONSTANT_FOLD_BARRIER
48+
; CHECK-NEXT: $rax = COPY [[COPY]]
49+
; CHECK-NEXT: RET 0, implicit $rax
50+
%0:gpr(s64) = COPY $rdi
51+
%1:gpr(s64) = G_CONSTANT_FOLD_BARRIER %0
52+
$rax = COPY %1(s64)
53+
RET 0, implicit $rax
54+
...
55+
56+
57+
---
58+
name: select_cfb_vec128
59+
legalized: true
60+
regBankSelected: true
61+
registers:
62+
- { id: 0, class: vecr, preferred-register: '', flags: [ ] }
63+
- { id: 1, class: vecr, preferred-register: '', flags: [ ] }
64+
body: |
65+
bb.0:
66+
liveins: $xmm0
67+
68+
; CHECK-LABEL: name: select_cfb_vec128
69+
; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
70+
; CHECK-NOT: G_CONSTANT_FOLD_BARRIER
71+
; CHECK-NEXT: $xmm1 = COPY [[COPY]]
72+
; CHECK-NEXT: RET 0, implicit $xmm1
73+
%0:vecr(<4 x s32>) = COPY $xmm0
74+
%1:vecr(<4 x s32>) = G_CONSTANT_FOLD_BARRIER %0
75+
$xmm1 = COPY %1(<4 x s32>)
76+
RET 0, implicit $xmm1
77+
...
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2+
3+
---
4+
name: select_freeze_vec256
5+
legalized: true
6+
regBankSelected: true
7+
registers:
8+
- { id: 0, class: vecr, preferred-register: '', flags: [ ] }
9+
- { id: 1, class: vecr, preferred-register: '', flags: [ ] }
10+
body: |
11+
bb.0:
12+
liveins: $ymm0
13+
14+
; CHECK-LABEL: name: select_freeze_vec256
15+
; CHECK: [[COPY:%[0-9]+]]:vr256 = COPY $ymm0
16+
; CHECK-NOT: G_FREEZE
17+
; CHECK-NEXT: $ymm1 = COPY [[COPY]]
18+
; CHECK-NEXT: RET 0, implicit $ymm1
19+
%0:vecr(<8 x s32>) = COPY $ymm0
20+
%1:vecr(<8 x s32>) = G_FREEZE %0
21+
$ymm1 = COPY %1(<8 x s32>)
22+
RET 0, implicit $ymm1
23+
...
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2+
3+
---
4+
name: select_freeze_vec512
5+
legalized: true
6+
regBankSelected: true
7+
registers:
8+
- { id: 0, class: vecr, preferred-register: '', flags: [ ] }
9+
- { id: 1, class: vecr, preferred-register: '', flags: [ ] }
10+
body: |
11+
bb.0:
12+
liveins: $zmm0
13+
14+
; CHECK-LABEL: name: select_freeze_vec512
15+
; CHECK: [[COPY:%[0-9]+]]:vr512 = COPY $zmm0
16+
; CHECK-NOT: G_FREEZE
17+
; CHECK-NEXT: $zmm1 = COPY [[COPY]]
18+
; CHECK-NEXT: RET 0, implicit $zmm1
19+
%0:vecr(<8 x s64>) = COPY $zmm0
20+
%1:vecr(<8 x s64>) = G_FREEZE %0
21+
$zmm1 = COPY %1(<8 x s64>)
22+
RET 0, implicit $zmm1
23+
...
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2+
3+
4+
---
5+
name: select_freeze_scalar_s32
6+
legalized: true
7+
regBankSelected: true
8+
registers:
9+
- { id: 0, class: gpr, preferred-register: '', flags: [ ] }
10+
- { id: 1, class: gpr, preferred-register: '', flags: [ ] }
11+
liveins:
12+
fixedStack:
13+
stack:
14+
constants:
15+
body: |
16+
bb.0:
17+
liveins: $edi
18+
19+
; CHECK-LABEL: name: select_freeze_scalar_s32
20+
; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $edi
21+
; CHECK-NOT: G_FREEZE
22+
; CHECK-NEXT: $eax = COPY [[COPY]]
23+
; CHECK-NEXT: RET 0, implicit $eax
24+
%0:gpr(s32) = COPY $edi
25+
%1:gpr(s32) = G_FREEZE %0
26+
$eax = COPY %1(s32)
27+
RET 0, implicit $eax
28+
...
29+
30+
---
31+
name: select_freeze_scalar_s64
32+
legalized: true
33+
regBankSelected: true
34+
registers:
35+
- { id: 0, class: gpr, preferred-register: '', flags: [ ] }
36+
- { id: 1, class: gpr, preferred-register: '', flags: [ ] }
37+
liveins:
38+
fixedStack:
39+
stack:
40+
constants:
41+
body: |
42+
bb.0:
43+
liveins: $rdi
44+
45+
; CHECK-LABEL: name: select_freeze_scalar_s64
46+
; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
47+
; CHECK-NOT: G_FREEZE
48+
; CHECK-NEXT: $rax = COPY [[COPY]]
49+
; CHECK-NEXT: RET 0, implicit $rax
50+
%0:gpr(s64) = COPY $rdi
51+
%1:gpr(s64) = G_FREEZE %0
52+
$rax = COPY %1(s64)
53+
RET 0, implicit $rax
54+
...
55+
56+
57+
---
58+
name: select_freeze_vec128
59+
legalized: true
60+
regBankSelected: true
61+
registers:
62+
- { id: 0, class: vecr, preferred-register: '', flags: [ ] }
63+
- { id: 1, class: vecr, preferred-register: '', flags: [ ] }
64+
body: |
65+
bb.0:
66+
liveins: $xmm0
67+
68+
; CHECK-LABEL: name: select_freeze_vec128
69+
; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
70+
; CHECK-NOT: G_FREEZE
71+
; CHECK-NEXT: $xmm1 = COPY [[COPY]]
72+
; CHECK-NEXT: RET 0, implicit $xmm1
73+
%0:vecr(<4 x s32>) = COPY $xmm0
74+
%1:vecr(<4 x s32>) = G_FREEZE %0
75+
$xmm1 = COPY %1(<4 x s32>)
76+
RET 0, implicit $xmm1
77+
...

0 commit comments

Comments
 (0)