[PATCH] D79721: [Clang][AArch64] Capturing proper pointer alignment for Neon vld1 intrinsicts
Eli Friedman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 27 13:03:04 PDT 2020
efriedma added a comment.
I'm not completely happy with using EmitPointerWithAlignment here... but I guess it's the same thing we do for 32-bit ARM, so it must be mostly usable in practice. I'd like to see some tests in clang/test/CodeGen/aarch64-neon-intrinsics.c showing what happens if you pass, for example, a void* pointer to vld1_u32.
================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:10332
case NEON::BI__builtin_neon_vld1q_v: {
+ auto PtrOp0 = EmitPointerWithAlignment(E->getArg(0));
Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
----------------
You can't call EmitPointerWithAlignment() here; we've already emitted the expression. See CodeGenFunction::EmitARMBuiltinExpr for how we handle this on 32-bit ARM.
================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:10334
Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
- auto Alignment = CharUnits::fromQuantity(
- BuiltinID == NEON::BI__builtin_neon_vld1_v ? 8 : 16);
- return Builder.CreateAlignedLoad(VTy, Ops[0], Alignment);
+ return Builder.CreateAlignedLoad(VTy, Ops[0], PtrOp0.getAlignment());
}
----------------
Might as well just `return Builder.CreateLoad(VTy, PtrOp0);`
================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:10363
}
case NEON::BI__builtin_neon_vst1_lane_v:
case NEON::BI__builtin_neon_vst1q_lane_v:
----------------
Should we fix vst1 while we're in the area?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D79721/new/
https://reviews.llvm.org/D79721
More information about the cfe-commits
mailing list