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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits