Skip to content

Commit 97ee7e3

Browse files
committed
[Clang] Rename elementwise builtins to clzg and ctzg
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 8bdaa12 commit 97ee7e3

File tree

12 files changed

+106
-106
lines changed

12 files changed

+106
-106
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
@@ -1831,7 +1831,7 @@ static bool interp__builtin_elementwise_countzeroes(InterpState &S,
18311831
const CallExpr *Call,
18321832
unsigned BuiltinID) {
18331833
const bool HasZeroArg = Call->getNumArgs() == 2;
1834-
const bool IsCTTZ = BuiltinID == Builtin::BI__builtin_elementwise_cttz;
1834+
const bool IsCTTZ = BuiltinID == Builtin::BI__builtin_elementwise_ctzg;
18351835
assert(Call->getNumArgs() == 1 || HasZeroArg);
18361836
if (Call->getArg(0)->getType()->isIntegerType()) {
18371837
PrimType ArgT = *S.getContext().classify(Call->getArg(0)->getType());
@@ -1855,7 +1855,7 @@ static bool interp__builtin_elementwise_countzeroes(InterpState &S,
18551855
return false;
18561856
}
18571857

1858-
if (BuiltinID == Builtin::BI__builtin_elementwise_ctlz) {
1858+
if (BuiltinID == Builtin::BI__builtin_elementwise_clzg) {
18591859
pushInteger(S, Val.countLeadingZeros(), Call->getType());
18601860
} else {
18611861
pushInteger(S, Val.countTrailingZeros(), Call->getType());
@@ -3164,8 +3164,8 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
31643164
case Builtin::BI__builtin_ctzg:
31653165
return interp__builtin_ctz(S, OpPC, Frame, Call, BuiltinID);
31663166

3167-
case Builtin::BI__builtin_elementwise_ctlz:
3168-
case Builtin::BI__builtin_elementwise_cttz:
3167+
case Builtin::BI__builtin_elementwise_clzg:
3168+
case Builtin::BI__builtin_elementwise_ctzg:
31693169
return interp__builtin_elementwise_countzeroes(S, OpPC, Frame, Call,
31703170
BuiltinID);
31713171

clang/lib/AST/ExprConstant.cpp

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

1204012040
return Success(APValue(ResultElements.data(), ResultElements.size()), E);
1204112041
}
12042-
case Builtin::BI__builtin_elementwise_ctlz:
12043-
case Builtin::BI__builtin_elementwise_cttz: {
12042+
case Builtin::BI__builtin_elementwise_clzg:
12043+
case Builtin::BI__builtin_elementwise_ctzg: {
1204412044
APValue SourceLHS;
1204512045
std::optional<APValue> Fallback;
1204612046
if (!EvaluateAsRValue(Info, E->getArg(0), SourceLHS))
@@ -12064,19 +12064,19 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1206412064
if (!Fallback) {
1206512065
Info.FFDiag(E, diag::note_constexpr_countzeroes_zero)
1206612066
<< /*IsTrailing=*/(E->getBuiltinCallee() ==
12067-
Builtin::BI__builtin_elementwise_cttz);
12067+
Builtin::BI__builtin_elementwise_ctzg);
1206812068
return false;
1206912069
}
1207012070
ResultElements.push_back(Fallback->getVectorElt(EltNum));
1207112071
continue;
1207212072
}
1207312073
switch (E->getBuiltinCallee()) {
12074-
case Builtin::BI__builtin_elementwise_ctlz:
12074+
case Builtin::BI__builtin_elementwise_clzg:
1207512075
ResultElements.push_back(APValue(
1207612076
APSInt(APInt(Info.Ctx.getIntWidth(DestEltTy), LHS.countl_zero()),
1207712077
DestEltTy->isUnsignedIntegerOrEnumerationType())));
1207812078
break;
12079-
case Builtin::BI__builtin_elementwise_cttz:
12079+
case Builtin::BI__builtin_elementwise_ctzg:
1208012080
ResultElements.push_back(APValue(
1208112081
APSInt(APInt(Info.Ctx.getIntWidth(DestEltTy), LHS.countr_zero()),
1208212082
DestEltTy->isUnsignedIntegerOrEnumerationType())));
@@ -13694,7 +13694,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1369413694
case Builtin::BI__builtin_clzll:
1369513695
case Builtin::BI__builtin_clzs:
1369613696
case Builtin::BI__builtin_clzg:
13697-
case Builtin::BI__builtin_elementwise_ctlz:
13697+
case Builtin::BI__builtin_elementwise_clzg:
1369813698
case Builtin::BI__lzcnt16: // Microsoft variants of count leading-zeroes
1369913699
case Builtin::BI__lzcnt:
1370013700
case Builtin::BI__lzcnt64: {
@@ -13710,7 +13710,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1371013710

1371113711
std::optional<APSInt> Fallback;
1371213712
if ((BuiltinOp == Builtin::BI__builtin_clzg ||
13713-
BuiltinOp == Builtin::BI__builtin_elementwise_ctlz) &&
13713+
BuiltinOp == Builtin::BI__builtin_elementwise_clzg) &&
1371413714
E->getNumArgs() > 1) {
1371513715
APSInt FallbackTemp;
1371613716
if (!EvaluateInteger(E->getArg(1), FallbackTemp, Info))
@@ -13729,7 +13729,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1372913729
BuiltinOp != Builtin::BI__lzcnt &&
1373013730
BuiltinOp != Builtin::BI__lzcnt64;
1373113731

13732-
if (BuiltinOp == Builtin::BI__builtin_elementwise_ctlz) {
13732+
if (BuiltinOp == Builtin::BI__builtin_elementwise_clzg) {
1373313733
Info.FFDiag(E, diag::note_constexpr_countzeroes_zero)
1373413734
<< /*IsTrailing=*/false;
1373513735
}
@@ -13789,7 +13789,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1378913789
case Builtin::BI__builtin_ctzll:
1379013790
case Builtin::BI__builtin_ctzs:
1379113791
case Builtin::BI__builtin_ctzg:
13792-
case Builtin::BI__builtin_elementwise_cttz: {
13792+
case Builtin::BI__builtin_elementwise_ctzg: {
1379313793
APSInt Val;
1379413794
if (E->getArg(0)->getType()->isExtVectorBoolType()) {
1379513795
APValue Vec;
@@ -13802,7 +13802,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1380213802

1380313803
std::optional<APSInt> Fallback;
1380413804
if ((BuiltinOp == Builtin::BI__builtin_ctzg ||
13805-
BuiltinOp == Builtin::BI__builtin_elementwise_cttz) &&
13805+
BuiltinOp == Builtin::BI__builtin_elementwise_ctzg) &&
1380613806
E->getNumArgs() > 1) {
1380713807
APSInt FallbackTemp;
1380813808
if (!EvaluateInteger(E->getArg(1), FallbackTemp, Info))
@@ -13814,7 +13814,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1381413814
if (Fallback)
1381513815
return Success(*Fallback, E);
1381613816

13817-
if (BuiltinOp == Builtin::BI__builtin_elementwise_cttz) {
13817+
if (BuiltinOp == Builtin::BI__builtin_elementwise_ctzg) {
1381813818
Info.FFDiag(E, diag::note_constexpr_countzeroes_zero)
1381913819
<< /*IsTrailing=*/true;
1382013820
}

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
@@ -146,7 +146,7 @@ _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
146146

147147
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
148148
_mm_lzcnt_epi32(__m128i __A) {
149-
return (__m128i)__builtin_elementwise_ctlz((__v4si)__A,
149+
return (__m128i)__builtin_elementwise_clzg((__v4si)__A,
150150
(__v4si)_mm_set1_epi32(32));
151151
}
152152

@@ -166,7 +166,7 @@ _mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) {
166166

167167
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
168168
_mm256_lzcnt_epi32(__m256i __A) {
169-
return (__m256i)__builtin_elementwise_ctlz((__v8si)__A,
169+
return (__m256i)__builtin_elementwise_clzg((__v8si)__A,
170170
(__v8si)_mm256_set1_epi32(32));
171171
}
172172

@@ -186,7 +186,7 @@ _mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) {
186186

187187
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
188188
_mm_lzcnt_epi64(__m128i __A) {
189-
return (__m128i)__builtin_elementwise_ctlz(
189+
return (__m128i)__builtin_elementwise_clzg(
190190
(__v2di)__A, (__v2di)_mm_set1_epi64x((long long)64));
191191
}
192192

@@ -206,7 +206,7 @@ _mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) {
206206

207207
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
208208
_mm256_lzcnt_epi64(__m256i __A) {
209-
return (__m256i)__builtin_elementwise_ctlz(
209+
return (__m256i)__builtin_elementwise_clzg(
210210
(__v4di)__A, (__v4di)_mm256_set1_epi64x((long long)64));
211211
}
212212

clang/lib/Sema/SemaChecking.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3181,8 +3181,8 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
31813181
TheCall->setType(Magnitude.get()->getType());
31823182
break;
31833183
}
3184-
case Builtin::BI__builtin_elementwise_ctlz:
3185-
case Builtin::BI__builtin_elementwise_cttz:
3184+
case Builtin::BI__builtin_elementwise_clzg:
3185+
case Builtin::BI__builtin_elementwise_ctzg:
31863186
// These builtins can be unary or binary. Note for empty calls we call the
31873187
// unary checker in order to not emit an error that says the function
31883188
// 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)