Skip to content

Commit 6fd5b8a

Browse files
[AIE2P][AIE2PS] Add support for G_CTTZ / G_CTTZ_ZERO_UNDEF
1 parent 6f2f117 commit 6fd5b8a

3 files changed

Lines changed: 147 additions & 0 deletions

File tree

llvm/lib/Target/AIE/aie2p/AIE2PLegalizerInfo.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,16 @@ AIE2PLegalizerInfo::AIE2PLegalizerInfo(const AIE2PSubtarget &ST)
448448
.clampScalar(0, S32, S32)
449449
.clampScalar(1, S32, S32);
450450

451+
getActionDefinitionsBuilder(G_CTTZ_ZERO_UNDEF)
452+
.lowerFor({{S32, S32}})
453+
.clampScalar(0, S32, S32)
454+
.clampScalar(1, S32, S32);
455+
456+
getActionDefinitionsBuilder(G_CTTZ)
457+
.lowerFor({{S32, S32}})
458+
.clampScalar(0, S32, S32)
459+
.clampScalar(1, S32, S32);
460+
451461
getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
452462

453463
getActionDefinitionsBuilder({G_MEMCPY, G_MEMSET, G_MEMMOVE})

llvm/lib/Target/AIE/aie2ps/AIE2PSLegalizerInfo.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,16 @@ AIE2PSLegalizerInfo::AIE2PSLegalizerInfo(const AIE2PSSubtarget &ST)
454454
.clampScalar(0, S32, S32)
455455
.clampScalar(1, S32, S32);
456456

457+
getActionDefinitionsBuilder(G_CTTZ_ZERO_UNDEF)
458+
.lowerFor({{S32, S32}})
459+
.clampScalar(0, S32, S32)
460+
.clampScalar(1, S32, S32);
461+
462+
getActionDefinitionsBuilder(G_CTTZ)
463+
.lowerFor({{S32, S32}})
464+
.clampScalar(0, S32, S32)
465+
.clampScalar(1, S32, S32);
466+
457467
getActionDefinitionsBuilder({G_FSHL, G_FSHR}).lower();
458468

459469
getActionDefinitionsBuilder({G_MEMCPY, G_MEMSET, G_MEMMOVE})
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
#
3+
# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
4+
# See https://llvm.org/LICENSE.txt for license information.
5+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
#
7+
# (c) Copyright 2026 Advanced Micro Devices, Inc. or its affiliates
8+
# RUN: llc -mtriple aie2p -run-pass=legalizer %s -verify-machineinstrs -o - | FileCheck %s
9+
# RUN: llc -mtriple aie2ps -run-pass=legalizer %s -verify-machineinstrs -o - | FileCheck %s
10+
11+
---
12+
name: cttz_s8
13+
body: |
14+
bb.0:
15+
; CHECK-LABEL: name: cttz_s8
16+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $r6
17+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 256
18+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY]], [[C]]
19+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
20+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[OR]], [[C1]]
21+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[OR]], [[C1]]
22+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[ADD]]
23+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
24+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
25+
; CHECK-NEXT: $r0 = COPY [[COPY1]](s32)
26+
%0:_(s32) = COPY $r6
27+
%1:_(s8) = G_TRUNC %0
28+
%2:_(s8) = G_CTTZ %1
29+
%3:_(s32) = G_ZEXT %2
30+
$r0 = COPY %3
31+
...
32+
33+
---
34+
name: cttz_s16
35+
body: |
36+
bb.0:
37+
; CHECK-LABEL: name: cttz_s16
38+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $r6
39+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
40+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY]], [[C]]
41+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
42+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[OR]], [[C1]]
43+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[OR]], [[C1]]
44+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[ADD]]
45+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
46+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
47+
; CHECK-NEXT: $r0 = COPY [[COPY1]](s32)
48+
%0:_(s32) = COPY $r6
49+
%1:_(s16) = G_TRUNC %0
50+
%2:_(s16) = G_CTTZ %1
51+
%3:_(s32) = G_ZEXT %2
52+
$r0 = COPY %3
53+
...
54+
55+
---
56+
name: cttz_s32
57+
body: |
58+
bb.0:
59+
; CHECK-LABEL: name: cttz_s32
60+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $r6
61+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
62+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[C]]
63+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C]]
64+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[ADD]]
65+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
66+
; CHECK-NEXT: $r0 = COPY [[CTPOP]](s32)
67+
%0:_(s32) = COPY $r6
68+
%1:_(s32) = G_CTTZ %0
69+
$r0 = COPY %1
70+
...
71+
72+
---
73+
name: cttz_zero_undef_s8
74+
body: |
75+
bb.0:
76+
; CHECK-LABEL: name: cttz_zero_undef_s8
77+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $r6
78+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
79+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[C]]
80+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C]]
81+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[ADD]]
82+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
83+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
84+
; CHECK-NEXT: $r0 = COPY [[COPY1]](s32)
85+
%0:_(s32) = COPY $r6
86+
%1:_(s8) = G_TRUNC %0
87+
%2:_(s8) = G_CTTZ_ZERO_UNDEF %1
88+
%3:_(s32) = G_ZEXT %2
89+
$r0 = COPY %3
90+
...
91+
92+
---
93+
name: cttz_zero_undef_s16
94+
body: |
95+
bb.0:
96+
; CHECK-LABEL: name: cttz_zero_undef_s16
97+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $r6
98+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
99+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[C]]
100+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C]]
101+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[ADD]]
102+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
103+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
104+
; CHECK-NEXT: $r0 = COPY [[COPY1]](s32)
105+
%0:_(s32) = COPY $r6
106+
%1:_(s16) = G_TRUNC %0
107+
%2:_(s16) = G_CTTZ_ZERO_UNDEF %1
108+
%3:_(s32) = G_ZEXT %2
109+
$r0 = COPY %3
110+
...
111+
112+
---
113+
name: cttz_zero_undef_s32
114+
body: |
115+
bb.0:
116+
; CHECK-LABEL: name: cttz_zero_undef_s32
117+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $r6
118+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
119+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[C]]
120+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C]]
121+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[ADD]]
122+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
123+
; CHECK-NEXT: $r0 = COPY [[CTPOP]](s32)
124+
%0:_(s32) = COPY $r6
125+
%1:_(s32) = G_CTTZ_ZERO_UNDEF %0
126+
$r0 = COPY %1
127+
...

0 commit comments

Comments
 (0)