Skip to content

Commit 1597fad

Browse files
authored
[Clang] Rename elementwise builtins to clzg and ctzg (#157128)
Summary: The added bit counting builtins for vectors used `cttz` and `ctlz`, which is consistent with the LLVM naming convention. However, these are clang builtins and implement exactly the `__builtin_ctzg` and `__builtin_clzg` behavior. It is confusing to people familiar with other other builtins that these are the only bit counting intrinsics named differently. This includes the additional operation for the undefined zero case, which was added as a `clzg` extension.
1 parent 7b8fd8f commit 1597fad

File tree

14 files changed

+105
-105
lines changed

14 files changed

+105
-105
lines changed

clang/docs/LanguageExtensions.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ The elementwise intrinsics ``__builtin_elementwise_popcount``,
772772
``__builtin_elementwise_bitreverse``, ``__builtin_elementwise_add_sat``,
773773
``__builtin_elementwise_sub_sat``, ``__builtin_elementwise_max``,
774774
``__builtin_elementwise_min``, ``__builtin_elementwise_abs``,
775-
``__builtin_elementwise_ctlz``, ``__builtin_elementwise_cttz``, and
775+
``__builtin_elementwise_clzg``, ``__builtin_elementwise_ctzg``, and
776776
``__builtin_elementwise_fma`` can be called in a ``constexpr`` context.
777777

778778
No implicit promotion of integer types takes place. The mixing of integer types
@@ -884,11 +884,11 @@ T __builtin_elementwise_fshr(T x, T y, T z) perform a funnel shift right. Co
884884
right by z (modulo the bit width of the original arguments),
885885
and the least significant bits are extracted to produce
886886
a result that is the same size as the original arguments.
887-
T __builtin_elementwise_ctlz(T x[, T y]) return the number of leading 0 bits in the first argument. If integer types
887+
T __builtin_elementwise_clzg(T x[, T y]) return the number of leading 0 bits in the first argument. If integer types
888888
the first argument is 0 and an optional second argument is provided,
889889
the second argument is returned. It is undefined behaviour if the
890890
first argument is 0 and no second argument is provided.
891-
T __builtin_elementwise_cttz(T x[, T y]) return the number of trailing 0 bits in the first argument. If integer types
891+
T __builtin_elementwise_ctzg(T x[, T y]) return the number of trailing 0 bits in the first argument. If integer types
892892
the first argument is 0 and an optional second argument is provided,
893893
the second argument is returned. It is undefined behaviour if the
894894
first argument is 0 and no second argument is provided.

clang/include/clang/Basic/Builtins.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,13 +1551,13 @@ def ElementwiseFshr : Builtin {
15511551
}
15521552

15531553
def ElementwiseCtlz : Builtin {
1554-
let Spellings = ["__builtin_elementwise_ctlz"];
1554+
let Spellings = ["__builtin_elementwise_clzg"];
15551555
let Attributes = [NoThrow, Const, CustomTypeChecking, Constexpr];
15561556
let Prototype = "void(...)";
15571557
}
15581558

15591559
def ElementwiseCttz : Builtin {
1560-
let Spellings = ["__builtin_elementwise_cttz"];
1560+
let Spellings = ["__builtin_elementwise_ctzg"];
15611561
let Attributes = [NoThrow, Const, CustomTypeChecking, Constexpr];
15621562
let Prototype = "void(...)";
15631563
}

clang/include/clang/Basic/DiagnosticASTKinds.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ def note_constexpr_non_const_vectorelements : Note<
401401
def note_constexpr_assumption_failed : Note<
402402
"assumption evaluated to false">;
403403
def note_constexpr_countzeroes_zero : Note<
404-
"evaluation of %select{__builtin_elementwise_ctlz|__builtin_elementwise_cttz}0 "
404+
"evaluation of %select{__builtin_elementwise_clzg|__builtin_elementwise_ctzg}0 "
405405
"with a zero value is undefined">;
406406
def err_experimental_clang_interp_failed : Error<
407407
"the experimental clang interpreter failed to evaluate an expression">;

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,7 @@ static bool interp__builtin_elementwise_countzeroes(InterpState &S,
18291829
const CallExpr *Call,
18301830
unsigned BuiltinID) {
18311831
const bool HasZeroArg = Call->getNumArgs() == 2;
1832-
const bool IsCTTZ = BuiltinID == Builtin::BI__builtin_elementwise_cttz;
1832+
const bool IsCTTZ = BuiltinID == Builtin::BI__builtin_elementwise_ctzg;
18331833
assert(Call->getNumArgs() == 1 || HasZeroArg);
18341834
if (Call->getArg(0)->getType()->isIntegerType()) {
18351835
PrimType ArgT = *S.getContext().classify(Call->getArg(0)->getType());
@@ -1853,7 +1853,7 @@ static bool interp__builtin_elementwise_countzeroes(InterpState &S,
18531853
return false;
18541854
}
18551855

1856-
if (BuiltinID == Builtin::BI__builtin_elementwise_ctlz) {
1856+
if (BuiltinID == Builtin::BI__builtin_elementwise_clzg) {
18571857
pushInteger(S, Val.countLeadingZeros(), Call->getType());
18581858
} else {
18591859
pushInteger(S, Val.countTrailingZeros(), Call->getType());
@@ -3232,8 +3232,8 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
32323232
case Builtin::BI__builtin_ctzg:
32333233
return interp__builtin_ctz(S, OpPC, Frame, Call, BuiltinID);
32343234

3235-
case Builtin::BI__builtin_elementwise_ctlz:
3236-
case Builtin::BI__builtin_elementwise_cttz:
3235+
case Builtin::BI__builtin_elementwise_clzg:
3236+
case Builtin::BI__builtin_elementwise_ctzg:
32373237
return interp__builtin_elementwise_countzeroes(S, OpPC, Frame, Call,
32383238
BuiltinID);
32393239

clang/lib/AST/ExprConstant.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12025,8 +12025,8 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1202512025

1202612026
return Success(APValue(ResultElements.data(), ResultElements.size()), E);
1202712027
}
12028-
case Builtin::BI__builtin_elementwise_ctlz:
12029-
case Builtin::BI__builtin_elementwise_cttz: {
12028+
case Builtin::BI__builtin_elementwise_clzg:
12029+
case Builtin::BI__builtin_elementwise_ctzg: {
1203012030
APValue SourceLHS;
1203112031
std::optional<APValue> Fallback;
1203212032
if (!EvaluateAsRValue(Info, E->getArg(0), SourceLHS))
@@ -12050,19 +12050,19 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1205012050
if (!Fallback) {
1205112051
Info.FFDiag(E, diag::note_constexpr_countzeroes_zero)
1205212052
<< /*IsTrailing=*/(E->getBuiltinCallee() ==
12053-
Builtin::BI__builtin_elementwise_cttz);
12053+
Builtin::BI__builtin_elementwise_ctzg);
1205412054
return false;
1205512055
}
1205612056
ResultElements.push_back(Fallback->getVectorElt(EltNum));
1205712057
continue;
1205812058
}
1205912059
switch (E->getBuiltinCallee()) {
12060-
case Builtin::BI__builtin_elementwise_ctlz:
12060+
case Builtin::BI__builtin_elementwise_clzg:
1206112061
ResultElements.push_back(APValue(
1206212062
APSInt(APInt(Info.Ctx.getIntWidth(DestEltTy), LHS.countl_zero()),
1206312063
DestEltTy->isUnsignedIntegerOrEnumerationType())));
1206412064
break;
12065-
case Builtin::BI__builtin_elementwise_cttz:
12065+
case Builtin::BI__builtin_elementwise_ctzg:
1206612066
ResultElements.push_back(APValue(
1206712067
APSInt(APInt(Info.Ctx.getIntWidth(DestEltTy), LHS.countr_zero()),
1206812068
DestEltTy->isUnsignedIntegerOrEnumerationType())));
@@ -13728,7 +13728,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1372813728
case Builtin::BI__builtin_clzll:
1372913729
case Builtin::BI__builtin_clzs:
1373013730
case Builtin::BI__builtin_clzg:
13731-
case Builtin::BI__builtin_elementwise_ctlz:
13731+
case Builtin::BI__builtin_elementwise_clzg:
1373213732
case Builtin::BI__lzcnt16: // Microsoft variants of count leading-zeroes
1373313733
case Builtin::BI__lzcnt:
1373413734
case Builtin::BI__lzcnt64: {
@@ -13744,7 +13744,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1374413744

1374513745
std::optional<APSInt> Fallback;
1374613746
if ((BuiltinOp == Builtin::BI__builtin_clzg ||
13747-
BuiltinOp == Builtin::BI__builtin_elementwise_ctlz) &&
13747+
BuiltinOp == Builtin::BI__builtin_elementwise_clzg) &&
1374813748
E->getNumArgs() > 1) {
1374913749
APSInt FallbackTemp;
1375013750
if (!EvaluateInteger(E->getArg(1), FallbackTemp, Info))
@@ -13763,7 +13763,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1376313763
BuiltinOp != Builtin::BI__lzcnt &&
1376413764
BuiltinOp != Builtin::BI__lzcnt64;
1376513765

13766-
if (BuiltinOp == Builtin::BI__builtin_elementwise_ctlz) {
13766+
if (BuiltinOp == Builtin::BI__builtin_elementwise_clzg) {
1376713767
Info.FFDiag(E, diag::note_constexpr_countzeroes_zero)
1376813768
<< /*IsTrailing=*/false;
1376913769
}
@@ -13823,7 +13823,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1382313823
case Builtin::BI__builtin_ctzll:
1382413824
case Builtin::BI__builtin_ctzs:
1382513825
case Builtin::BI__builtin_ctzg:
13826-
case Builtin::BI__builtin_elementwise_cttz: {
13826+
case Builtin::BI__builtin_elementwise_ctzg: {
1382713827
APSInt Val;
1382813828
if (E->getArg(0)->getType()->isExtVectorBoolType()) {
1382913829
APValue Vec;
@@ -13836,7 +13836,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1383613836

1383713837
std::optional<APSInt> Fallback;
1383813838
if ((BuiltinOp == Builtin::BI__builtin_ctzg ||
13839-
BuiltinOp == Builtin::BI__builtin_elementwise_cttz) &&
13839+
BuiltinOp == Builtin::BI__builtin_elementwise_ctzg) &&
1384013840
E->getNumArgs() > 1) {
1384113841
APSInt FallbackTemp;
1384213842
if (!EvaluateInteger(E->getArg(1), FallbackTemp, Info))
@@ -13848,7 +13848,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1384813848
if (Fallback)
1384913849
return Success(*Fallback, E);
1385013850

13851-
if (BuiltinOp == Builtin::BI__builtin_elementwise_cttz) {
13851+
if (BuiltinOp == Builtin::BI__builtin_elementwise_ctzg) {
1385213852
Info.FFDiag(E, diag::note_constexpr_countzeroes_zero)
1385313853
<< /*IsTrailing=*/true;
1385413854
}

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3343,10 +3343,10 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
33433343
case Builtin::BI__builtin_ctzl:
33443344
case Builtin::BI__builtin_ctzll:
33453345
case Builtin::BI__builtin_ctzg:
3346-
case Builtin::BI__builtin_elementwise_cttz: {
3346+
case Builtin::BI__builtin_elementwise_ctzg: {
33473347
bool HasFallback =
33483348
(BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_ctzg ||
3349-
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_cttz) &&
3349+
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_ctzg) &&
33503350
E->getNumArgs() > 1;
33513351

33523352
Value *ArgValue =
@@ -3360,7 +3360,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
33603360
// The elementwise builtins always exhibit zero-is-undef behaviour
33613361
Value *ZeroUndef = Builder.getInt1(
33623362
HasFallback || getTarget().isCLZForZeroUndef() ||
3363-
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_cttz);
3363+
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_ctzg);
33643364
Value *Result = Builder.CreateCall(F, {ArgValue, ZeroUndef});
33653365
if (Result->getType() != ResultType)
33663366
Result =
@@ -3380,10 +3380,10 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
33803380
case Builtin::BI__builtin_clzl:
33813381
case Builtin::BI__builtin_clzll:
33823382
case Builtin::BI__builtin_clzg:
3383-
case Builtin::BI__builtin_elementwise_ctlz: {
3383+
case Builtin::BI__builtin_elementwise_clzg: {
33843384
bool HasFallback =
33853385
(BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_clzg ||
3386-
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_ctlz) &&
3386+
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_clzg) &&
33873387
E->getNumArgs() > 1;
33883388

33893389
Value *ArgValue =
@@ -3397,7 +3397,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
33973397
// The elementwise builtins always exhibit zero-is-undef behaviour
33983398
Value *ZeroUndef = Builder.getInt1(
33993399
HasFallback || getTarget().isCLZForZeroUndef() ||
3400-
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_ctlz);
3400+
BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_clzg);
34013401
Value *Result = Builder.CreateCall(F, {ArgValue, ZeroUndef});
34023402
if (Result->getType() != ResultType)
34033403
Result =

clang/lib/Headers/avx512cdintrin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ _mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
7171

7272
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
7373
_mm512_lzcnt_epi32(__m512i __A) {
74-
return (__m512i)__builtin_elementwise_ctlz((__v16si)__A,
74+
return (__m512i)__builtin_elementwise_clzg((__v16si)__A,
7575
(__v16si)_mm512_set1_epi32(32));
7676
}
7777

@@ -91,7 +91,7 @@ _mm512_maskz_lzcnt_epi32(__mmask16 __U, __m512i __A) {
9191

9292
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
9393
_mm512_lzcnt_epi64(__m512i __A) {
94-
return (__m512i)__builtin_elementwise_ctlz(
94+
return (__m512i)__builtin_elementwise_clzg(
9595
(__v8di)__A, (__v8di)_mm512_set1_epi64((long long)64));
9696
}
9797

clang/lib/Headers/avx512vlcdintrin.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
144144

145145
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
146146
_mm_lzcnt_epi32(__m128i __A) {
147-
return (__m128i)__builtin_elementwise_ctlz((__v4si)__A,
147+
return (__m128i)__builtin_elementwise_clzg((__v4si)__A,
148148
(__v4si)_mm_set1_epi32(32));
149149
}
150150

@@ -164,7 +164,7 @@ _mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) {
164164

165165
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
166166
_mm256_lzcnt_epi32(__m256i __A) {
167-
return (__m256i)__builtin_elementwise_ctlz((__v8si)__A,
167+
return (__m256i)__builtin_elementwise_clzg((__v8si)__A,
168168
(__v8si)_mm256_set1_epi32(32));
169169
}
170170

@@ -184,7 +184,7 @@ _mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) {
184184

185185
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
186186
_mm_lzcnt_epi64(__m128i __A) {
187-
return (__m128i)__builtin_elementwise_ctlz(
187+
return (__m128i)__builtin_elementwise_clzg(
188188
(__v2di)__A, (__v2di)_mm_set1_epi64x((long long)64));
189189
}
190190

@@ -204,7 +204,7 @@ _mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) {
204204

205205
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
206206
_mm256_lzcnt_epi64(__m256i __A) {
207-
return (__m256i)__builtin_elementwise_ctlz(
207+
return (__m256i)__builtin_elementwise_clzg(
208208
(__v4di)__A, (__v4di)_mm256_set1_epi64x((long long)64));
209209
}
210210

clang/lib/Sema/SemaChecking.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3179,8 +3179,8 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
31793179
TheCall->setType(Magnitude.get()->getType());
31803180
break;
31813181
}
3182-
case Builtin::BI__builtin_elementwise_ctlz:
3183-
case Builtin::BI__builtin_elementwise_cttz:
3182+
case Builtin::BI__builtin_elementwise_clzg:
3183+
case Builtin::BI__builtin_elementwise_ctzg:
31843184
// These builtins can be unary or binary. Note for empty calls we call the
31853185
// unary checker in order to not emit an error that says the function
31863186
// expects 2 arguments, which would be misleading.

clang/test/CodeGen/builtins-elementwise-math.c

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,98 +1266,98 @@ void test_builtin_elementwise_fshl(long long int i1, long long int i2,
12661266
u4 tmp_vu_r = __builtin_elementwise_fshr(vu1, vu2, vu3);
12671267
}
12681268

1269-
void test_builtin_elementwise_ctlz(si8 vs1, si8 vs2, u4 vu1,
1269+
void test_builtin_elementwise_clzg(si8 vs1, si8 vs2, u4 vu1,
12701270
long long int lli, short si,
12711271
_BitInt(31) bi, int i,
12721272
char ci) {
12731273
// CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr
12741274
// CHECK-NEXT: call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[V8S1]], i1 true)
1275-
vs1 = __builtin_elementwise_ctlz(vs1);
1275+
vs1 = __builtin_elementwise_clzg(vs1);
12761276

12771277
// CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr
12781278
// CHECK-NEXT: [[CLZ:%.+]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[V8S1]], i1 true)
12791279
// CHECK-NEXT: [[ISZERO:%.+]] = icmp eq <8 x i16> [[V8S1]], zeroinitializer
12801280
// CHECK-NEXT: [[V8S2:%.+]] = load <8 x i16>, ptr %vs2.addr
12811281
// select <8 x i1> [[ISZERO]], <8 x i16> [[CLZ]], <8 x i16> [[V8S2]]
1282-
vs1 = __builtin_elementwise_ctlz(vs1, vs2);
1282+
vs1 = __builtin_elementwise_clzg(vs1, vs2);
12831283

12841284
// CHECK: [[V4U1:%.+]] = load <4 x i32>, ptr %vu1.addr
12851285
// CHECK-NEXT: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[V4U1]], i1 true)
1286-
vu1 = __builtin_elementwise_ctlz(vu1);
1286+
vu1 = __builtin_elementwise_clzg(vu1);
12871287

12881288
// CHECK: [[LLI:%.+]] = load i64, ptr %lli.addr
12891289
// CHECK-NEXT: call i64 @llvm.ctlz.i64(i64 [[LLI]], i1 true)
1290-
lli = __builtin_elementwise_ctlz(lli);
1290+
lli = __builtin_elementwise_clzg(lli);
12911291

12921292
// CHECK: [[SI:%.+]] = load i16, ptr %si.addr
12931293
// CHECK-NEXT: call i16 @llvm.ctlz.i16(i16 [[SI]], i1 true)
1294-
si = __builtin_elementwise_ctlz(si);
1294+
si = __builtin_elementwise_clzg(si);
12951295

12961296
// CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr
12971297
// CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31
12981298
// CHECK-NEXT: call i31 @llvm.ctlz.i31(i31 [[BI2]], i1 true)
1299-
bi = __builtin_elementwise_ctlz(bi);
1299+
bi = __builtin_elementwise_clzg(bi);
13001300

13011301
// CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr
13021302
// CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31
13031303
// CHECK-NEXT: [[CLZ:%.+]] = call i31 @llvm.ctlz.i31(i31 [[BI2]], i1 true)
13041304
// CHECK-NEXT: [[ISZERO:%.+]] = icmp eq i31 [[BI2]], 0
13051305
// CHECK-NEXT: select i1 [[ISZERO]], i31 1, i31 [[CLZ]]
1306-
bi = __builtin_elementwise_ctlz(bi, (_BitInt(31))1);
1306+
bi = __builtin_elementwise_clzg(bi, (_BitInt(31))1);
13071307

13081308
// CHECK: [[I:%.+]] = load i32, ptr %i.addr
13091309
// CHECK-NEXT: call i32 @llvm.ctlz.i32(i32 [[I]], i1 true)
1310-
i = __builtin_elementwise_ctlz(i);
1310+
i = __builtin_elementwise_clzg(i);
13111311

13121312
// CHECK: [[CI:%.+]] = load i8, ptr %ci.addr
13131313
// CHECK-NEXT: call i8 @llvm.ctlz.i8(i8 [[CI]], i1 true)
1314-
ci = __builtin_elementwise_ctlz(ci);
1314+
ci = __builtin_elementwise_clzg(ci);
13151315
}
13161316

1317-
void test_builtin_elementwise_cttz(si8 vs1, si8 vs2, u4 vu1,
1317+
void test_builtin_elementwise_ctzg(si8 vs1, si8 vs2, u4 vu1,
13181318
long long int lli, short si,
13191319
_BitInt(31) bi, int i,
13201320
char ci) {
13211321
// CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr
13221322
// CHECK-NEXT: call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[V8S1]], i1 true)
1323-
vs1 = __builtin_elementwise_cttz(vs1);
1323+
vs1 = __builtin_elementwise_ctzg(vs1);
13241324

13251325
// CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr
13261326
// CHECK-NEXT: [[ctz:%.+]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[V8S1]], i1 true)
13271327
// CHECK-NEXT: [[ISZERO:%.+]] = icmp eq <8 x i16> [[V8S1]], zeroinitializer
13281328
// CHECK-NEXT: [[V8S2:%.+]] = load <8 x i16>, ptr %vs2.addr
13291329
// select <8 x i1> [[ISZERO]], <8 x i16> [[ctz]], <8 x i16> [[V8S2]]
1330-
vs1 = __builtin_elementwise_cttz(vs1, vs2);
1330+
vs1 = __builtin_elementwise_ctzg(vs1, vs2);
13311331

13321332
// CHECK: [[V4U1:%.+]] = load <4 x i32>, ptr %vu1.addr
13331333
// CHECK-NEXT: call <4 x i32> @llvm.cttz.v4i32(<4 x i32> [[V4U1]], i1 true)
1334-
vu1 = __builtin_elementwise_cttz(vu1);
1334+
vu1 = __builtin_elementwise_ctzg(vu1);
13351335

13361336
// CHECK: [[LLI:%.+]] = load i64, ptr %lli.addr
13371337
// CHECK-NEXT: call i64 @llvm.cttz.i64(i64 [[LLI]], i1 true)
1338-
lli = __builtin_elementwise_cttz(lli);
1338+
lli = __builtin_elementwise_ctzg(lli);
13391339

13401340
// CHECK: [[SI:%.+]] = load i16, ptr %si.addr
13411341
// CHECK-NEXT: call i16 @llvm.cttz.i16(i16 [[SI]], i1 true)
1342-
si = __builtin_elementwise_cttz(si);
1342+
si = __builtin_elementwise_ctzg(si);
13431343

13441344
// CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr
13451345
// CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31
13461346
// CHECK-NEXT: call i31 @llvm.cttz.i31(i31 [[BI2]], i1 true)
1347-
bi = __builtin_elementwise_cttz(bi);
1347+
bi = __builtin_elementwise_ctzg(bi);
13481348

13491349
// CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr
13501350
// CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31
13511351
// CHECK-NEXT: [[ctz:%.+]] = call i31 @llvm.cttz.i31(i31 [[BI2]], i1 true)
13521352
// CHECK-NEXT: [[ISZERO:%.+]] = icmp eq i31 [[BI2]], 0
13531353
// CHECK-NEXT: select i1 [[ISZERO]], i31 1, i31 [[ctz]]
1354-
bi = __builtin_elementwise_cttz(bi, (_BitInt(31))1);
1354+
bi = __builtin_elementwise_ctzg(bi, (_BitInt(31))1);
13551355

13561356
// CHECK: [[I:%.+]] = load i32, ptr %i.addr
13571357
// CHECK-NEXT: call i32 @llvm.cttz.i32(i32 [[I]], i1 true)
1358-
i = __builtin_elementwise_cttz(i);
1358+
i = __builtin_elementwise_ctzg(i);
13591359

13601360
// CHECK: [[CI:%.+]] = load i8, ptr %ci.addr
13611361
// CHECK-NEXT: call i8 @llvm.cttz.i8(i8 [[CI]], i1 true)
1362-
ci = __builtin_elementwise_cttz(ci);
1362+
ci = __builtin_elementwise_ctzg(ci);
13631363
}

0 commit comments

Comments
 (0)