[PATCH] D113306: [PowerPC] Allow MMA built-ins to accept non-void pointers and arrays
Ahsan Saghir via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 16 07:14:52 PST 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4c8b8e0154f0: [PowerPC] Allow MMA built-ins to accept non-void pointers and arrays (authored by saghir).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113306/new/
https://reviews.llvm.org/D113306
Files:
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/Sema/SemaChecking.cpp
clang/test/Sema/ppc-pair-mma-types.c
Index: clang/test/Sema/ppc-pair-mma-types.c
===================================================================
--- clang/test/Sema/ppc-pair-mma-types.c
+++ clang/test/Sema/ppc-pair-mma-types.c
@@ -339,20 +339,20 @@
void testRestrictQualifiedPointer1(int *__restrict acc) {
vector float arr[4];
- __builtin_mma_disassemble_acc((void *)arr, acc); // expected-error {{passing 'int *restrict' to parameter of incompatible type '__vector_quad *'}}
+ __builtin_mma_disassemble_acc(arr, acc); // expected-error {{passing 'int *restrict' to parameter of incompatible type '__vector_quad *'}}
}
void testRestrictQualifiedPointer2(__vector_quad *__restrict acc) {
vector float arr[4];
- __builtin_mma_disassemble_acc((void *)arr, acc);
+ __builtin_mma_disassemble_acc(arr, acc);
}
void testVolatileQualifiedPointer1(int *__volatile acc) {
vector float arr[4];
- __builtin_mma_disassemble_acc((void *)arr, acc); // expected-error {{passing 'int *volatile' to parameter of incompatible type '__vector_quad *'}}
+ __builtin_mma_disassemble_acc(arr, acc); // expected-error {{passing 'int *volatile' to parameter of incompatible type '__vector_quad *'}}
}
void testVolatileQualifiedPointer2(__vector_quad *__volatile acc) {
vector float arr[4];
- __builtin_mma_disassemble_acc((void *)arr, acc);
+ __builtin_mma_disassemble_acc(arr, acc);
}
Index: clang/lib/Sema/SemaChecking.cpp
===================================================================
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -7553,11 +7553,11 @@
StrippedRVType = StrippedRVType.getCanonicalType().getUnqualifiedType();
// The only case where the argument type and expected type are allowed to
- // mismatch is if the argument type is a non-void pointer and expected type
- // is a void pointer.
+ // mismatch is if the argument type is a non-void pointer (or array) and
+ // expected type is a void pointer.
if (StrippedRVType != ExpectedType)
if (!(ExpectedType->isVoidPointerType() &&
- StrippedRVType->isPointerType()))
+ (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))
return Diag(Arg->getBeginLoc(),
diag::err_typecheck_convert_incompatible)
<< PassedType << ExpectedType << 1 << 0 << 0;
Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -15171,8 +15171,12 @@
const CallExpr *E) {
SmallVector<Value*, 4> Ops;
- for (unsigned i = 0, e = E->getNumArgs(); i != e; i++)
- Ops.push_back(EmitScalarExpr(E->getArg(i)));
+ for (unsigned i = 0, e = E->getNumArgs(); i != e; i++) {
+ if (E->getArg(i)->getType()->isArrayType())
+ Ops.push_back(EmitArrayToPointerDecay(E->getArg(i)).getPointer());
+ else
+ Ops.push_back(EmitScalarExpr(E->getArg(i)));
+ }
Intrinsic::ID ID = Intrinsic::not_intrinsic;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113306.387633.patch
Type: text/x-patch
Size: 3053 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211116/3c7846af/attachment.bin>
More information about the cfe-commits
mailing list