diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -9026,8 +9026,11 @@ BasePtr = Builder.CreateBitCast(BasePtr, MemEltTy->getPointerTo()); Function *F = CGM.getIntrinsic(BuiltinID, MemoryTy); - auto *Load = - cast(Builder.CreateCall(F, {Predicate, BasePtr})); + auto *Load = Builder.CreateCall(F, {Predicate, BasePtr}); + if (BuiltinID == Intrinsic::aarch64_sve_ldnt1) { + Load->addParamAttr( + 1, Attribute::get(getLLVMContext(), Attribute::ElementType, MemEltTy)); + } auto TBAAInfo = CGM.getTBAAAccessInfo(LangPTy->getPointeeType()); CGM.DecorateInstructionWithTBAA(Load, TBAAInfo); @@ -9057,8 +9060,11 @@ BasePtr = Builder.CreateBitCast(BasePtr, MemEltTy->getPointerTo()); Function *F = CGM.getIntrinsic(BuiltinID, MemoryTy); - auto *Store = - cast(Builder.CreateCall(F, {Val, Predicate, BasePtr})); + auto *Store = Builder.CreateCall(F, {Val, Predicate, BasePtr}); + if (BuiltinID == Intrinsic::aarch64_sve_stnt1) { + Store->addParamAttr( + 2, Attribute::get(getLLVMContext(), Attribute::ElementType, MemEltTy)); + } auto TBAAInfo = CGM.getTBAAAccessInfo(LangPTy->getPointeeType()); CGM.DecorateInstructionWithTBAA(Store, TBAAInfo); return Store; @@ -9681,23 +9687,26 @@ QualType Ty = E->getType(); llvm::Type *RealResTy = ConvertType(Ty); - llvm::Type *PtrTy = llvm::IntegerType::get( - getLLVMContext(), getContext().getTypeSize(Ty))->getPointerTo(); + llvm::Type *IntTy = + llvm::IntegerType::get(getLLVMContext(), getContext().getTypeSize(Ty)); + llvm::Type *PtrTy = IntTy->getPointerTo(); LoadAddr = Builder.CreateBitCast(LoadAddr, PtrTy); Function *F = CGM.getIntrinsic(BuiltinID == AArch64::BI__builtin_arm_ldaex ? Intrinsic::aarch64_ldaxr : Intrinsic::aarch64_ldxr, PtrTy); - Value *Val = Builder.CreateCall(F, LoadAddr, "ldxr"); + CallInst *Val = Builder.CreateCall(F, LoadAddr, "ldxr"); + Val->addParamAttr( + 0, Attribute::get(getLLVMContext(), Attribute::ElementType, IntTy)); if (RealResTy->isPointerTy()) return Builder.CreateIntToPtr(Val, RealResTy); llvm::Type *IntResTy = llvm::IntegerType::get( getLLVMContext(), CGM.getDataLayout().getTypeSizeInBits(RealResTy)); - Val = Builder.CreateTruncOrBitCast(Val, IntResTy); - return Builder.CreateBitCast(Val, RealResTy); + return Builder.CreateBitCast(Builder.CreateTruncOrBitCast(Val, IntResTy), + RealResTy); } if ((BuiltinID == AArch64::BI__builtin_arm_strex || @@ -9745,7 +9754,10 @@ ? Intrinsic::aarch64_stlxr : Intrinsic::aarch64_stxr, StoreAddr->getType()); - return Builder.CreateCall(F, {StoreVal, StoreAddr}, "stxr"); + CallInst *CI = Builder.CreateCall(F, {StoreVal, StoreAddr}, "stxr"); + CI->addParamAttr( + 1, Attribute::get(getLLVMContext(), Attribute::ElementType, StoreTy)); + return CI; } if (BuiltinID == AArch64::BI__getReg) { diff --git a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1-bfloat.c b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1-bfloat.c --- a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1-bfloat.c +++ b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1-bfloat.c @@ -19,13 +19,13 @@ // CHECK-LABEL: @test_svldnt1_bf16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* elementtype(bfloat) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z17test_svldnt1_bf16u10__SVBool_tPKu6__bf16( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* elementtype(bfloat) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svbfloat16_t test_svldnt1_bf16(svbool_t pg, const bfloat16_t *base) @@ -39,7 +39,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast bfloat* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* elementtype(bfloat) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z22test_svldnt1_vnum_bf16u10__SVBool_tPKu6__bf16l( @@ -47,7 +47,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast bfloat* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8bf16( [[TMP0]], bfloat* elementtype(bfloat) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svbfloat16_t test_svldnt1_vnum_bf16(svbool_t pg, const bfloat16_t *base, int64_t vnum) diff --git a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1.c b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1.c --- a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1.c +++ b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ldnt1.c @@ -17,12 +17,12 @@ // CHECK-LABEL: @test_svldnt1_s8( // CHECK-NEXT: entry: -// CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP0]] // // CPP-CHECK-LABEL: @_Z15test_svldnt1_s8u10__SVBool_tPKa( // CPP-CHECK-NEXT: entry: -// CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP0]] // svint8_t test_svldnt1_s8(svbool_t pg, const int8_t *base) @@ -33,13 +33,13 @@ // CHECK-LABEL: @test_svldnt1_s16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_s16u10__SVBool_tPKs( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svint16_t test_svldnt1_s16(svbool_t pg, const int16_t *base) @@ -50,13 +50,13 @@ // CHECK-LABEL: @test_svldnt1_s32( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_s32u10__SVBool_tPKi( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svint32_t test_svldnt1_s32(svbool_t pg, const int32_t *base) @@ -67,13 +67,13 @@ // CHECK-LABEL: @test_svldnt1_s64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_s64u10__SVBool_tPKl( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svint64_t test_svldnt1_s64(svbool_t pg, const int64_t *base) @@ -83,12 +83,12 @@ // CHECK-LABEL: @test_svldnt1_u8( // CHECK-NEXT: entry: -// CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP0]] // // CPP-CHECK-LABEL: @_Z15test_svldnt1_u8u10__SVBool_tPKh( // CPP-CHECK-NEXT: entry: -// CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP0]] // svuint8_t test_svldnt1_u8(svbool_t pg, const uint8_t *base) @@ -99,13 +99,13 @@ // CHECK-LABEL: @test_svldnt1_u16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_u16u10__SVBool_tPKt( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svuint16_t test_svldnt1_u16(svbool_t pg, const uint16_t *base) @@ -116,13 +116,13 @@ // CHECK-LABEL: @test_svldnt1_u32( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_u32u10__SVBool_tPKj( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svuint32_t test_svldnt1_u32(svbool_t pg, const uint32_t *base) @@ -133,13 +133,13 @@ // CHECK-LABEL: @test_svldnt1_u64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_u64u10__SVBool_tPKm( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svuint64_t test_svldnt1_u64(svbool_t pg, const uint64_t *base) @@ -150,13 +150,13 @@ // CHECK-LABEL: @test_svldnt1_f16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* elementtype(half) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_f16u10__SVBool_tPKDh( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* elementtype(half) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svfloat16_t test_svldnt1_f16(svbool_t pg, const float16_t *base) @@ -167,13 +167,13 @@ // CHECK-LABEL: @test_svldnt1_f32( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* elementtype(float) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_f32u10__SVBool_tPKf( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* elementtype(float) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svfloat32_t test_svldnt1_f32(svbool_t pg, const float32_t *base) @@ -184,13 +184,13 @@ // CHECK-LABEL: @test_svldnt1_f64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* [[BASE:%.*]]) +// CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* elementtype(double) [[BASE:%.*]]) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z16test_svldnt1_f64u10__SVBool_tPKd( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* [[BASE:%.*]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* elementtype(double) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret [[TMP1]] // svfloat64_t test_svldnt1_f64(svbool_t pg, const float64_t *base) @@ -202,14 +202,14 @@ // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[TMP1]]) +// CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CHECK-NEXT: ret [[TMP2]] // // CPP-CHECK-LABEL: @_Z20test_svldnt1_vnum_s8u10__SVBool_tPKal( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[TMP1]]) +// CPP-CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CPP-CHECK-NEXT: ret [[TMP2]] // svint8_t test_svldnt1_vnum_s8(svbool_t pg, const int8_t *base, int64_t vnum) @@ -222,7 +222,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_s16u10__SVBool_tPKsl( @@ -230,7 +230,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svint16_t test_svldnt1_vnum_s16(svbool_t pg, const int16_t *base, int64_t vnum) @@ -243,7 +243,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_s32u10__SVBool_tPKil( @@ -251,7 +251,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svint32_t test_svldnt1_vnum_s32(svbool_t pg, const int32_t *base, int64_t vnum) @@ -264,7 +264,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_s64u10__SVBool_tPKll( @@ -272,7 +272,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svint64_t test_svldnt1_vnum_s64(svbool_t pg, const int64_t *base, int64_t vnum) @@ -284,14 +284,14 @@ // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[TMP1]]) +// CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CHECK-NEXT: ret [[TMP2]] // // CPP-CHECK-LABEL: @_Z20test_svldnt1_vnum_u8u10__SVBool_tPKhl( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* [[TMP1]]) +// CPP-CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv16i8( [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CPP-CHECK-NEXT: ret [[TMP2]] // svuint8_t test_svldnt1_vnum_u8(svbool_t pg, const uint8_t *base, int64_t vnum) @@ -304,7 +304,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_u16u10__SVBool_tPKtl( @@ -312,7 +312,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8i16( [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svuint16_t test_svldnt1_vnum_u16(svbool_t pg, const uint16_t *base, int64_t vnum) @@ -325,7 +325,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_u32u10__SVBool_tPKjl( @@ -333,7 +333,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4i32( [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svuint32_t test_svldnt1_vnum_u32(svbool_t pg, const uint32_t *base, int64_t vnum) @@ -346,7 +346,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_u64u10__SVBool_tPKml( @@ -354,7 +354,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2i64( [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svuint64_t test_svldnt1_vnum_u64(svbool_t pg, const uint64_t *base, int64_t vnum) @@ -367,7 +367,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast half* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* elementtype(half) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_f16u10__SVBool_tPKDhl( @@ -375,7 +375,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast half* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv8f16( [[TMP0]], half* elementtype(half) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svfloat16_t test_svldnt1_vnum_f16(svbool_t pg, const float16_t *base, int64_t vnum) @@ -388,7 +388,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* elementtype(float) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_f32u10__SVBool_tPKfl( @@ -396,7 +396,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv4f32( [[TMP0]], float* elementtype(float) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svfloat32_t test_svldnt1_vnum_f32(svbool_t pg, const float32_t *base, int64_t vnum) @@ -409,7 +409,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast double* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* [[TMP2]]) +// CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* elementtype(double) [[TMP2]]) // CHECK-NEXT: ret [[TMP3]] // // CPP-CHECK-LABEL: @_Z21test_svldnt1_vnum_f64u10__SVBool_tPKdl( @@ -417,7 +417,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast double* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* [[TMP2]]) +// CPP-CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.ldnt1.nxv2f64( [[TMP0]], double* elementtype(double) [[TMP2]]) // CPP-CHECK-NEXT: ret [[TMP3]] // svfloat64_t test_svldnt1_vnum_f64(svbool_t pg, const float64_t *base, int64_t vnum) diff --git a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1-bfloat.c b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1-bfloat.c --- a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1-bfloat.c +++ b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1-bfloat.c @@ -19,13 +19,13 @@ // CHECK-LABEL: @test_svstnt1_bf16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* elementtype(bfloat) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z17test_svstnt1_bf16u10__SVBool_tPu6__bf16u14__SVBFloat16_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* elementtype(bfloat) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_bf16(svbool_t pg, bfloat16_t *base, svbfloat16_t data) @@ -39,7 +39,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast bfloat* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* elementtype(bfloat) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z22test_svstnt1_vnum_bf16u10__SVBool_tPu6__bf16lu14__SVBFloat16_t( @@ -47,7 +47,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast bfloat* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8bf16( [[DATA:%.*]], [[TMP0]], bfloat* elementtype(bfloat) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_bf16(svbool_t pg, bfloat16_t *base, int64_t vnum, svbfloat16_t data) diff --git a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1.c b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1.c --- a/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1.c +++ b/clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1.c @@ -17,12 +17,12 @@ // CHECK-LABEL: @test_svstnt1_s8( // CHECK-NEXT: entry: -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z15test_svstnt1_s8u10__SVBool_tPau10__SVInt8_t( // CPP-CHECK-NEXT: entry: -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_s8(svbool_t pg, int8_t *base, svint8_t data) @@ -33,13 +33,13 @@ // CHECK-LABEL: @test_svstnt1_s16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_s16u10__SVBool_tPsu11__SVInt16_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_s16(svbool_t pg, int16_t *base, svint16_t data) @@ -50,13 +50,13 @@ // CHECK-LABEL: @test_svstnt1_s32( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_s32u10__SVBool_tPiu11__SVInt32_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_s32(svbool_t pg, int32_t *base, svint32_t data) @@ -67,13 +67,13 @@ // CHECK-LABEL: @test_svstnt1_s64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_s64u10__SVBool_tPlu11__SVInt64_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_s64(svbool_t pg, int64_t *base, svint64_t data) @@ -83,12 +83,12 @@ // CHECK-LABEL: @test_svstnt1_u8( // CHECK-NEXT: entry: -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z15test_svstnt1_u8u10__SVBool_tPhu11__SVUint8_t( // CPP-CHECK-NEXT: entry: -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_u8(svbool_t pg, uint8_t *base, svuint8_t data) @@ -99,13 +99,13 @@ // CHECK-LABEL: @test_svstnt1_u16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_u16u10__SVBool_tPtu12__SVUint16_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_u16(svbool_t pg, uint16_t *base, svuint16_t data) @@ -116,13 +116,13 @@ // CHECK-LABEL: @test_svstnt1_u32( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_u32u10__SVBool_tPju12__SVUint32_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_u32(svbool_t pg, uint32_t *base, svuint32_t data) @@ -133,13 +133,13 @@ // CHECK-LABEL: @test_svstnt1_u64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_u64u10__SVBool_tPmu12__SVUint64_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_u64(svbool_t pg, uint64_t *base, svuint64_t data) @@ -150,13 +150,13 @@ // CHECK-LABEL: @test_svstnt1_f16( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* elementtype(half) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_f16u10__SVBool_tPDhu13__SVFloat16_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* elementtype(half) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_f16(svbool_t pg, float16_t *base, svfloat16_t data) @@ -167,13 +167,13 @@ // CHECK-LABEL: @test_svstnt1_f32( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* elementtype(float) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_f32u10__SVBool_tPfu13__SVFloat32_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* elementtype(float) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_f32(svbool_t pg, float32_t *base, svfloat32_t data) @@ -184,13 +184,13 @@ // CHECK-LABEL: @test_svstnt1_f64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* [[BASE:%.*]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* elementtype(double) [[BASE:%.*]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z16test_svstnt1_f64u10__SVBool_tPdu13__SVFloat64_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* [[BASE:%.*]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* elementtype(double) [[BASE:%.*]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_f64(svbool_t pg, float64_t *base, svfloat64_t data) @@ -202,14 +202,14 @@ // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[TMP1]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z20test_svstnt1_vnum_s8u10__SVBool_tPalu10__SVInt8_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[TMP1]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_s8(svbool_t pg, int8_t *base, int64_t vnum, svint8_t data) @@ -222,7 +222,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_s16u10__SVBool_tPslu11__SVInt16_t( @@ -230,7 +230,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_s16(svbool_t pg, int16_t *base, int64_t vnum, svint16_t data) @@ -243,7 +243,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_s32u10__SVBool_tPilu11__SVInt32_t( @@ -251,7 +251,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_s32(svbool_t pg, int32_t *base, int64_t vnum, svint32_t data) @@ -264,7 +264,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_s64u10__SVBool_tPllu11__SVInt64_t( @@ -272,7 +272,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_s64(svbool_t pg, int64_t *base, int64_t vnum, svint64_t data) @@ -284,14 +284,14 @@ // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[TMP1]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z20test_svstnt1_vnum_u8u10__SVBool_tPhlu11__SVUint8_t( // CPP-CHECK-NEXT: entry: // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP1:%.*]] = getelementptr , * [[TMP0]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* [[TMP1]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv16i8( [[DATA:%.*]], [[PG:%.*]], i8* elementtype(i8) [[TMP1]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_u8(svbool_t pg, uint8_t *base, int64_t vnum, svuint8_t data) @@ -304,7 +304,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_u16u10__SVBool_tPtlu12__SVUint16_t( @@ -312,7 +312,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i16* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8i16( [[DATA:%.*]], [[TMP0]], i16* elementtype(i16) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_u16(svbool_t pg, uint16_t *base, int64_t vnum, svuint16_t data) @@ -325,7 +325,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_u32u10__SVBool_tPjlu12__SVUint32_t( @@ -333,7 +333,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4i32( [[DATA:%.*]], [[TMP0]], i32* elementtype(i32) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_u32(svbool_t pg, uint32_t *base, int64_t vnum, svuint32_t data) @@ -346,7 +346,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_u64u10__SVBool_tPmlu12__SVUint64_t( @@ -354,7 +354,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast i64* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2i64( [[DATA:%.*]], [[TMP0]], i64* elementtype(i64) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_u64(svbool_t pg, uint64_t *base, int64_t vnum, svuint64_t data) @@ -367,7 +367,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast half* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* elementtype(half) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_f16u10__SVBool_tPDhlu13__SVFloat16_t( @@ -375,7 +375,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast half* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv8f16( [[DATA:%.*]], [[TMP0]], half* elementtype(half) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_f16(svbool_t pg, float16_t *base, int64_t vnum, svfloat16_t data) @@ -388,7 +388,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* elementtype(float) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_f32u10__SVBool_tPflu13__SVFloat32_t( @@ -396,7 +396,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv4f32( [[DATA:%.*]], [[TMP0]], float* elementtype(float) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_f32(svbool_t pg, float32_t *base, int64_t vnum, svfloat32_t data) @@ -409,7 +409,7 @@ // CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CHECK-NEXT: [[TMP1:%.*]] = bitcast double* [[BASE:%.*]] to * // CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* [[TMP2]]) +// CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* elementtype(double) [[TMP2]]) // CHECK-NEXT: ret void // // CPP-CHECK-LABEL: @_Z21test_svstnt1_vnum_f64u10__SVBool_tPdlu13__SVFloat64_t( @@ -417,7 +417,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv2i1( [[PG:%.*]]) // CPP-CHECK-NEXT: [[TMP1:%.*]] = bitcast double* [[BASE:%.*]] to * // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr , * [[TMP1]], i64 [[VNUM:%.*]], i64 0 -// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* [[TMP2]]) +// CPP-CHECK-NEXT: call void @llvm.aarch64.sve.stnt1.nxv2f64( [[DATA:%.*]], [[TMP0]], double* elementtype(double) [[TMP2]]) // CPP-CHECK-NEXT: ret void // void test_svstnt1_vnum_f64(svbool_t pg, float64_t *base, int64_t vnum, svfloat64_t data) diff --git a/clang/test/CodeGen/arm_acle.c b/clang/test/CodeGen/arm_acle.c --- a/clang/test/CodeGen/arm_acle.c +++ b/clang/test/CodeGen/arm_acle.c @@ -153,10 +153,10 @@ // AArch64-NEXT: [[TMP0:%.*]] = bitcast i8* [[P:%.*]] to i32* // AArch64-NEXT: br label [[DO_BODY_I:%.*]] // AArch64: do.body.i: -// AArch64-NEXT: [[LDXR_I:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[TMP0]]) [[ATTR3]] +// AArch64-NEXT: [[LDXR_I:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) [[TMP0]]) [[ATTR3]] // AArch64-NEXT: [[TMP1:%.*]] = trunc i64 [[LDXR_I]] to i32 // AArch64-NEXT: [[TMP2:%.*]] = zext i32 [[X:%.*]] to i64 -// AArch64-NEXT: [[STXR_I:%.*]] = call i32 @llvm.aarch64.stxr.p0i32(i64 [[TMP2]], i32* [[TMP0]]) [[ATTR3]] +// AArch64-NEXT: [[STXR_I:%.*]] = call i32 @llvm.aarch64.stxr.p0i32(i64 [[TMP2]], i32* elementtype(i32) [[TMP0]]) [[ATTR3]] // AArch64-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[STXR_I]], 0 // AArch64-NEXT: br i1 [[TOBOOL_I]], label [[DO_BODY_I]], label [[__SWP_EXIT:%.*]], [[LOOP6:!llvm.loop !.*]] // AArch64: __swp.exit: diff --git a/clang/test/CodeGen/builtins-arm-exclusive.c b/clang/test/CodeGen/builtins-arm-exclusive.c --- a/clang/test/CodeGen/builtins-arm-exclusive.c +++ b/clang/test/CodeGen/builtins-arm-exclusive.c @@ -13,49 +13,49 @@ // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i8(i8* %addr) // CHECK: trunc i32 [[INTRES]] to i8 -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i8(i8* %addr) -// CHECK-ARM64: trunc i64 [[INTRES]] to i8 + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i8(i8* elementtype(i8) %addr) + // CHECK-ARM64: trunc i64 [[INTRES]] to i8 sum += __builtin_arm_ldrex((short *)addr); // CHECK: [[ADDR16:%.*]] = bitcast i8* %addr to i16* // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i16(i16* [[ADDR16]]) // CHECK: trunc i32 [[INTRES]] to i16 -// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i16(i16* [[ADDR16]]) -// CHECK-ARM64: trunc i64 [[INTRES]] to i16 + // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i16(i16* elementtype(i16) [[ADDR16]]) + // CHECK-ARM64: trunc i64 [[INTRES]] to i16 sum += __builtin_arm_ldrex((int *)addr); // CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32* // CHECK: call i32 @llvm.arm.ldrex.p0i32(i32* [[ADDR32]]) -// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[ADDR32]]) -// CHECK-ARM64: trunc i64 [[INTRES]] to i32 + // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) [[ADDR32]]) + // CHECK-ARM64: trunc i64 [[INTRES]] to i32 sum += __builtin_arm_ldrex((long long *)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to i64* // CHECK: [[TMP5:%.*]] = bitcast i64* [[TMP4]] to i8* // CHECK: call { i32, i32 } @llvm.arm.ldrexd(i8* [[TMP5]]) -// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* -// CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* [[ADDR64]]) + // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* + // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[ADDR64]]) sum += __builtin_arm_ldrex(addr64); // CHECK: [[ADDR64_AS8:%.*]] = bitcast i64* %addr64 to i8* // CHECK: call { i32, i32 } @llvm.arm.ldrexd(i8* [[ADDR64_AS8]]) -// CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* %addr64) + // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) %addr64) sum += __builtin_arm_ldrex(addrfloat); // CHECK: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i32(i32* [[INTADDR]]) // CHECK: bitcast i32 [[INTRES]] to float -// CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[INTADDR]]) -// CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32 -// CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float + // CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) [[INTADDR]]) + // CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32 + // CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float sum += __builtin_arm_ldrex((double *)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to double* @@ -69,10 +69,10 @@ // CHECK: [[INTRES:%.*]] = or i64 [[RESHIHI]], [[RESLO64]] // CHECK: bitcast i64 [[INTRES]] to double -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* -// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]]) -// CHECK-ARM64: bitcast i64 [[INTRES]] to double + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* + // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[TMP5]]) + // CHECK-ARM64: bitcast i64 [[INTRES]] to double sum += *__builtin_arm_ldrex((int **)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to i32** @@ -80,10 +80,10 @@ // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i32(i32* [[TMP5]]) // CHECK: inttoptr i32 [[INTRES]] to i32* -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32** -// CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]]) -// CHECK-ARM64: inttoptr i64 [[INTRES]] to i32* + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32** + // CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[TMP5]]) + // CHECK-ARM64: inttoptr i64 [[INTRES]] to i32* sum += __builtin_arm_ldrex((struct Simple **)addr)->a; // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** @@ -91,10 +91,10 @@ // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldrex.p0i32(i32* [[TMP5]]) // CHECK: inttoptr i32 [[INTRES]] to %struct.Simple* -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** -// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]]) -// CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple* + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** + // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) [[TMP5]]) + // CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple* return sum; } @@ -106,49 +106,49 @@ // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i8(i8* %addr) // CHECK: trunc i32 [[INTRES]] to i8 -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i8(i8* %addr) -// CHECK-ARM64: trunc i64 [[INTRES]] to i8 + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i8(i8* elementtype(i8) %addr) + // CHECK-ARM64: trunc i64 [[INTRES]] to i8 sum += __builtin_arm_ldaex((short *)addr); // CHECK: [[ADDR16:%.*]] = bitcast i8* %addr to i16* // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i16(i16* [[ADDR16]]) // CHECK: trunc i32 [[INTRES]] to i16 -// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* [[ADDR16]]) -// CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i16 + // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* elementtype(i16) [[ADDR16]]) + // CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i16 sum += __builtin_arm_ldaex((int *)addr); // CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32* // CHECK: call i32 @llvm.arm.ldaex.p0i32(i32* [[ADDR32]]) -// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[ADDR32]]) -// CHECK-ARM64: trunc i64 [[INTRES]] to i32 + // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) [[ADDR32]]) + // CHECK-ARM64: trunc i64 [[INTRES]] to i32 sum += __builtin_arm_ldaex((long long *)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to i64* // CHECK: [[TMP5:%.*]] = bitcast i64* [[TMP4]] to i8* // CHECK: call { i32, i32 } @llvm.arm.ldaexd(i8* [[TMP5]]) -// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* -// CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[ADDR64]]) + // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* + // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[ADDR64]]) sum += __builtin_arm_ldaex(addr64); // CHECK: [[ADDR64_AS8:%.*]] = bitcast i64* %addr64 to i8* // CHECK: call { i32, i32 } @llvm.arm.ldaexd(i8* [[ADDR64_AS8]]) -// CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* %addr64) + // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) %addr64) sum += __builtin_arm_ldaex(addrfloat); // CHECK: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i32(i32* [[INTADDR]]) // CHECK: bitcast i32 [[INTRES]] to float -// CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[INTADDR]]) -// CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32 -// CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float + // CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) [[INTADDR]]) + // CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32 + // CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float sum += __builtin_arm_ldaex((double *)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to double* @@ -162,10 +162,10 @@ // CHECK: [[INTRES:%.*]] = or i64 [[RESHIHI]], [[RESLO64]] // CHECK: bitcast i64 [[INTRES]] to double -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* -// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]]) -// CHECK-ARM64: bitcast i64 [[INTRES]] to double + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* + // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP5]]) + // CHECK-ARM64: bitcast i64 [[INTRES]] to double sum += *__builtin_arm_ldaex((int **)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to i32** @@ -173,10 +173,10 @@ // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i32(i32* [[TMP5]]) // CHECK: inttoptr i32 [[INTRES]] to i32* -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32** -// CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]]) -// CHECK-ARM64: inttoptr i64 [[INTRES]] to i32* + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32** + // CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP5]]) + // CHECK-ARM64: inttoptr i64 [[INTRES]] to i32* sum += __builtin_arm_ldaex((struct Simple **)addr)->a; // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** @@ -184,10 +184,10 @@ // CHECK: [[INTRES:%.*]] = call i32 @llvm.arm.ldaex.p0i32(i32* [[TMP5]]) // CHECK: inttoptr i32 [[INTRES]] to %struct.Simple* -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** -// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* -// CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]]) -// CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple* + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** + // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* + // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP5]]) + // CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple* return sum; } @@ -199,21 +199,21 @@ res |= __builtin_arm_strex(4, addr); // CHECK: call i32 @llvm.arm.strex.p0i8(i32 4, i8* %addr) -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i8(i64 4, i8* %addr) + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i8(i64 4, i8* elementtype(i8) %addr) res |= __builtin_arm_strex(42, (short *)addr); // CHECK: [[ADDR16:%.*]] = bitcast i8* %addr to i16* // CHECK: call i32 @llvm.arm.strex.p0i16(i32 42, i16* [[ADDR16]]) -// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i16(i64 42, i16* [[ADDR16]]) + // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i16(i64 42, i16* elementtype(i16) [[ADDR16]]) res |= __builtin_arm_strex(42, (int *)addr); // CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32* // CHECK: call i32 @llvm.arm.strex.p0i32(i32 42, i32* [[ADDR32]]) -// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 42, i32* [[ADDR32]]) + // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 42, i32* elementtype(i32) [[ADDR32]]) res |= __builtin_arm_strex(42, (long long *)addr); // CHECK: store i64 42, i64* [[TMP:%.*]], align 8 @@ -225,17 +225,17 @@ // CHECK: [[TMP5:%.*]] = bitcast i64* [[TMP4]] to i8* // CHECK: call i32 @llvm.arm.strexd(i32 [[LO]], i32 [[HI]], i8* [[TMP5]]) -// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 42, i64* [[ADDR64]]) + // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 42, i64* elementtype(i64) [[ADDR64]]) res |= __builtin_arm_strex(2.71828f, (float *)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to float* // CHECK: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* // CHECK: call i32 @llvm.arm.strex.p0i32(i32 1076754509, i32* [[TMP5]]) -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float* -// CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 1076754509, i32* [[TMP5]]) + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float* + // CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 1076754509, i32* elementtype(i32) [[TMP5]]) res |= __builtin_arm_strex(3.14159, (double *)addr); // CHECK: store double 3.141590e+00, double* [[TMP:%.*]], align 8 @@ -247,9 +247,9 @@ // CHECK: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i8* // CHECK: call i32 @llvm.arm.strexd(i32 [[LO]], i32 [[HI]], i8* [[TMP5]]) -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* -// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 4614256650576692846, i64* [[TMP5]]) + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* + // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 4614256650576692846, i64* elementtype(i64) [[TMP5]]) res |= __builtin_arm_strex(&var, (struct Simple **)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** @@ -257,10 +257,10 @@ // CHECK: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i32 // CHECK: call i32 @llvm.arm.strex.p0i32(i32 [[INTVAL]], i32* [[TMP5]]) -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** -// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* -// CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64 -// CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 [[INTVAL]], i64* [[TMP5]]) + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** + // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* + // CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64 + // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 [[INTVAL]], i64* elementtype(i64) [[TMP5]]) return res; } @@ -273,21 +273,21 @@ res |= __builtin_arm_stlex(4, addr); // CHECK: call i32 @llvm.arm.stlex.p0i8(i32 4, i8* %addr) -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i8(i64 4, i8* %addr) + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i8(i64 4, i8* elementtype(i8) %addr) res |= __builtin_arm_stlex(42, (short *)addr); // CHECK: [[ADDR16:%.*]] = bitcast i8* %addr to i16* // CHECK: call i32 @llvm.arm.stlex.p0i16(i32 42, i16* [[ADDR16]]) -// CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i16(i64 42, i16* [[ADDR16]]) + // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i16(i64 42, i16* elementtype(i16) [[ADDR16]]) res |= __builtin_arm_stlex(42, (int *)addr); // CHECK: [[ADDR32:%.*]] = bitcast i8* %addr to i32* // CHECK: call i32 @llvm.arm.stlex.p0i32(i32 42, i32* [[ADDR32]]) -// CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 42, i32* [[ADDR32]]) + // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 42, i32* elementtype(i32) [[ADDR32]]) res |= __builtin_arm_stlex(42, (long long *)addr); // CHECK: store i64 42, i64* [[TMP:%.*]], align 8 @@ -299,17 +299,17 @@ // CHECK: [[TMP5:%.*]] = bitcast i64* [[TMP4]] to i8* // CHECK: call i32 @llvm.arm.stlexd(i32 [[LO]], i32 [[HI]], i8* [[TMP5]]) -// CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 42, i64* [[ADDR64]]) + // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 42, i64* elementtype(i64) [[ADDR64]]) res |= __builtin_arm_stlex(2.71828f, (float *)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to float* // CHECK: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* // CHECK: call i32 @llvm.arm.stlex.p0i32(i32 1076754509, i32* [[TMP5]]) -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float* -// CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 1076754509, i32* [[TMP5]]) + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float* + // CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 1076754509, i32* elementtype(i32) [[TMP5]]) res |= __builtin_arm_stlex(3.14159, (double *)addr); // CHECK: store double 3.141590e+00, double* [[TMP:%.*]], align 8 @@ -321,9 +321,9 @@ // CHECK: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i8* // CHECK: call i32 @llvm.arm.stlexd(i32 [[LO]], i32 [[HI]], i8* [[TMP5]]) -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* -// CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 4614256650576692846, i64* [[TMP5]]) + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* + // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 4614256650576692846, i64* elementtype(i64) [[TMP5]]) res |= __builtin_arm_stlex(&var, (struct Simple **)addr); // CHECK: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** @@ -331,10 +331,10 @@ // CHECK: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i32 // CHECK: call i32 @llvm.arm.stlex.p0i32(i32 [[INTVAL]], i32* [[TMP5]]) -// CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** -// CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* -// CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64 -// CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 [[INTVAL]], i64* [[TMP5]]) + // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** + // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* + // CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64 + // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 [[INTVAL]], i64* elementtype(i64) [[TMP5]]) return res; } @@ -398,13 +398,13 @@ // CHECK-ARM64-LABEL: @test_stlex_128 return __builtin_arm_stlex(val, addr); -// CHECK-ARM64: store i128 %val, i128* [[TMP:%.*]], align 16 -// CHECK-ARM64: [[LOHI_ADDR:%.*]] = bitcast i128* [[TMP]] to { i64, i64 }* -// CHECK-ARM64: [[LOHI:%.*]] = load { i64, i64 }, { i64, i64 }* [[LOHI_ADDR]] -// CHECK-ARM64: [[LO:%.*]] = extractvalue { i64, i64 } [[LOHI]], 0 -// CHECK-ARM64: [[HI:%.*]] = extractvalue { i64, i64 } [[LOHI]], 1 -// CHECK-ARM64: [[ADDR8:%.*]] = bitcast i128* %addr to i8* -// CHECK-ARM64: [[RES:%.*]] = call i32 @llvm.aarch64.stlxp(i64 [[LO]], i64 [[HI]], i8* [[ADDR8]]) + // CHECK-ARM64: store i128 %val, i128* [[TMP:%.*]], align 16 + // CHECK-ARM64: [[LOHI_ADDR:%.*]] = bitcast i128* [[TMP]] to { i64, i64 }* + // CHECK-ARM64: [[LOHI:%.*]] = load { i64, i64 }, { i64, i64 }* [[LOHI_ADDR]] + // CHECK-ARM64: [[LO:%.*]] = extractvalue { i64, i64 } [[LOHI]], 0 + // CHECK-ARM64: [[HI:%.*]] = extractvalue { i64, i64 } [[LOHI]], 1 + // CHECK-ARM64: [[ADDR8:%.*]] = bitcast i128* %addr to i8* + // CHECK-ARM64: [[RES:%.*]] = call i32 @llvm.aarch64.stlxp(i64 [[LO]], i64 [[HI]], i8* [[ADDR8]]) } #endif diff --git a/clang/test/CodeGenCXX/builtins-arm-exclusive.cpp b/clang/test/CodeGenCXX/builtins-arm-exclusive.cpp --- a/clang/test/CodeGenCXX/builtins-arm-exclusive.cpp +++ b/clang/test/CodeGenCXX/builtins-arm-exclusive.cpp @@ -7,7 +7,7 @@ // CHECK: call i32 @llvm.arm.ldrex.p0i8(i8* @b) // CHECK-ARM64-LABEL: @_Z10test_ldrexv() -// CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i8(i8* @b) +// CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i8(i8* elementtype(i8) @b) void test_ldrex() { b = __builtin_arm_ldrex(&b); @@ -17,7 +17,7 @@ // CHECK: %{{.*}} = call i32 @llvm.arm.strex.p0i8(i32 1, i8* @b) // CHECK-ARM64-LABEL: @_Z10tset_strexv() -// CHECK-ARM64: %{{.*}} = call i32 @llvm.aarch64.stxr.p0i8(i64 1, i8* @b) +// CHECK-ARM64: %{{.*}} = call i32 @llvm.aarch64.stxr.p0i8(i64 1, i8* elementtype(i8) @b) void tset_strex() { __builtin_arm_strex(true, &b); diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -84,6 +84,7 @@ #include "llvm/IR/Instructions.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Intrinsics.h" +#include "llvm/IR/IntrinsicsAArch64.h" #include "llvm/IR/IntrinsicsWebAssembly.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Metadata.h" @@ -5496,6 +5497,48 @@ &Call); break; } + case Intrinsic::aarch64_ldaxr: + case Intrinsic::aarch64_ldxr: { + Type *ElemTy = Call.getAttributes().getParamElementType(0); + Assert(ElemTy, + "Intrinsic requires elementtype attribute on first argument.", + &Call); + Assert(cast(Call.getArgOperand(0)->getType()) + ->isOpaqueOrPointeeTypeMatches(ElemTy), + "elementtype/pointee type mismatch"); + break; + } + case Intrinsic::aarch64_stlxr: + case Intrinsic::aarch64_stxr: { + Type *ElemTy = Call.getAttributes().getParamElementType(1); + Assert(ElemTy, + "Intrinsic requires elementtype attribute on second argument.", + &Call); + Assert(cast(Call.getArgOperand(1)->getType()) + ->isOpaqueOrPointeeTypeMatches(ElemTy), + "elementtype/pointee type mismatch"); + break; + } + case Intrinsic::aarch64_sve_ldnt1: { + Type *ElemTy = Call.getAttributes().getParamElementType(1); + Assert(ElemTy, + "Intrinsic requires elementtype attribute on second argument.", + &Call); + Assert(cast(Call.getArgOperand(1)->getType()) + ->isOpaqueOrPointeeTypeMatches(ElemTy), + "elementtype/pointee type mismatch"); + break; + } + case Intrinsic::aarch64_sve_stnt1: { + Type *ElemTy = Call.getAttributes().getParamElementType(2); + Assert(ElemTy, + "Intrinsic requires elementtype attribute on third argument.", + &Call); + Assert(cast(Call.getArgOperand(2)->getType()) + ->isOpaqueOrPointeeTypeMatches(ElemTy), + "elementtype/pointee type mismatch"); + break; + } }; } diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -11916,23 +11916,23 @@ } case Intrinsic::aarch64_ldaxr: case Intrinsic::aarch64_ldxr: { - PointerType *PtrTy = cast(I.getArgOperand(0)->getType()); + Type *ValTy = I.getParamElementType(0); Info.opc = ISD::INTRINSIC_W_CHAIN; - Info.memVT = MVT::getVT(PtrTy->getPointerElementType()); + Info.memVT = MVT::getVT(ValTy); Info.ptrVal = I.getArgOperand(0); Info.offset = 0; - Info.align = DL.getABITypeAlign(PtrTy->getPointerElementType()); + Info.align = DL.getABITypeAlign(ValTy); Info.flags = MachineMemOperand::MOLoad | MachineMemOperand::MOVolatile; return true; } case Intrinsic::aarch64_stlxr: case Intrinsic::aarch64_stxr: { - PointerType *PtrTy = cast(I.getArgOperand(1)->getType()); + Type *ValTy = I.getParamElementType(1); Info.opc = ISD::INTRINSIC_W_CHAIN; - Info.memVT = MVT::getVT(PtrTy->getPointerElementType()); + Info.memVT = MVT::getVT(ValTy); Info.ptrVal = I.getArgOperand(1); Info.offset = 0; - Info.align = DL.getABITypeAlign(PtrTy->getPointerElementType()); + Info.align = DL.getABITypeAlign(ValTy); Info.flags = MachineMemOperand::MOStore | MachineMemOperand::MOVolatile; return true; } @@ -11955,22 +11955,22 @@ Info.flags = MachineMemOperand::MOStore | MachineMemOperand::MOVolatile; return true; case Intrinsic::aarch64_sve_ldnt1: { - PointerType *PtrTy = cast(I.getArgOperand(1)->getType()); + Type *ValTy = I.getParamElementType(1); Info.opc = ISD::INTRINSIC_W_CHAIN; Info.memVT = MVT::getVT(I.getType()); Info.ptrVal = I.getArgOperand(1); Info.offset = 0; - Info.align = DL.getABITypeAlign(PtrTy->getPointerElementType()); + Info.align = DL.getABITypeAlign(ValTy); Info.flags = MachineMemOperand::MOLoad | MachineMemOperand::MONonTemporal; return true; } case Intrinsic::aarch64_sve_stnt1: { - PointerType *PtrTy = cast(I.getArgOperand(2)->getType()); + Type *ValTy = I.getParamElementType(2); Info.opc = ISD::INTRINSIC_W_CHAIN; Info.memVT = MVT::getVT(I.getOperand(0)->getType()); Info.ptrVal = I.getArgOperand(2); Info.offset = 0; - Info.align = DL.getABITypeAlign(PtrTy->getPointerElementType()); + Info.align = DL.getABITypeAlign(ValTy); Info.flags = MachineMemOperand::MOStore | MachineMemOperand::MONonTemporal; return true; } @@ -19019,7 +19019,10 @@ const DataLayout &DL = M->getDataLayout(); IntegerType *IntEltTy = Builder.getIntNTy(DL.getTypeSizeInBits(ValueTy)); - Value *Trunc = Builder.CreateTrunc(Builder.CreateCall(Ldxr, Addr), IntEltTy); + CallInst *CI = Builder.CreateCall(Ldxr, Addr); + CI->addParamAttr( + 0, Attribute::get(Builder.getContext(), Attribute::ElementType, ValueTy)); + Value *Trunc = Builder.CreateTrunc(CI, IntEltTy); return Builder.CreateBitCast(Trunc, ValueTy); } @@ -19060,10 +19063,13 @@ IntegerType *IntValTy = Builder.getIntNTy(DL.getTypeSizeInBits(Val->getType())); Val = Builder.CreateBitCast(Val, IntValTy); - return Builder.CreateCall(Stxr, - {Builder.CreateZExtOrBitCast( - Val, Stxr->getFunctionType()->getParamType(0)), - Addr}); + CallInst *CI = Builder.CreateCall( + Stxr, {Builder.CreateZExtOrBitCast( + Val, Stxr->getFunctionType()->getParamType(0)), + Addr}); + CI->addParamAttr(1, Attribute::get(Builder.getContext(), + Attribute::ElementType, Val->getType())); + return CI; } bool AArch64TargetLowering::functionArgumentNeedsConsecutiveRegisters( diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll --- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll +++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll @@ -1785,7 +1785,7 @@ ; CHECK: [[ADDR:%[0-9]+]]:_(p0) = COPY $x0 ; CHECK: [[VAL:%[0-9]+]]:_(s64) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.ldxr), [[ADDR]](p0) :: (volatile load (s32) from %ir.addr) ; CHECK: G_TRUNC [[VAL]](s64) - %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) %addr) %trunc = trunc i64 %val to i32 ret i32 %trunc } diff --git a/llvm/test/CodeGen/AArch64/arm64-ldxr-stxr.ll b/llvm/test/CodeGen/AArch64/arm64-ldxr-stxr.ll --- a/llvm/test/CodeGen/AArch64/arm64-ldxr-stxr.ll +++ b/llvm/test/CodeGen/AArch64/arm64-ldxr-stxr.ll @@ -45,7 +45,7 @@ ; GISEL: ldxrb w[[LOADVAL:[0-9]+]], [x0] ; GISEL-NOT: uxtb ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldxr.p0i8(i8* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i8(i8* elementtype(i8) %addr) %shortval = trunc i64 %val to i8 %extval = zext i8 %shortval to i64 store i64 %extval, i64* @var, align 8 @@ -64,7 +64,7 @@ ; GISEL: ldxrh w[[LOADVAL:[0-9]+]], [x0] ; GISEL-NOT: uxtb ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldxr.p0i16(i16* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i16(i16* elementtype(i16) %addr) %shortval = trunc i64 %val to i16 %extval = zext i16 %shortval to i64 store i64 %extval, i64* @var, align 8 @@ -83,7 +83,7 @@ ; GISEL: ldxr w[[LOADVAL:[0-9]+]], [x0] ; GISEL-NOT: uxtb ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) %addr) %shortval = trunc i64 %val to i32 %extval = zext i32 %shortval to i64 store i64 %extval, i64* @var, align 8 @@ -100,7 +100,7 @@ ; GISEL: ldxr x[[LOADVAL:[0-9]+]], [x0] ; GISEL-NOT: uxtb ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldxr.p0i64(i64* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) %addr) store i64 %val, i64* @var, align 8 ret void } @@ -122,7 +122,7 @@ ; GISEL-NOT: and ; GISEL: stxrb w0, w1, [x2] %extval = zext i8 %val to i64 - %res = call i32 @llvm.aarch64.stxr.p0i8(i64 %extval, i8* %addr) + %res = call i32 @llvm.aarch64.stxr.p0i8(i64 %extval, i8* elementtype(i8) %addr) ret i32 %res } @@ -137,7 +137,7 @@ ; GISEL-NOT: and ; GISEL: stxrh w0, w1, [x2] %extval = zext i16 %val to i64 - %res = call i32 @llvm.aarch64.stxr.p0i16(i64 %extval, i16* %addr) + %res = call i32 @llvm.aarch64.stxr.p0i16(i64 %extval, i16* elementtype(i16) %addr) ret i32 %res } @@ -152,7 +152,7 @@ ; GISEL-NOT: and ; GISEL: stxr w0, w1, [x2] %extval = zext i32 %val to i64 - %res = call i32 @llvm.aarch64.stxr.p0i32(i64 %extval, i32* %addr) + %res = call i32 @llvm.aarch64.stxr.p0i32(i64 %extval, i32* elementtype(i32) %addr) ret i32 %res } @@ -162,7 +162,7 @@ ; CHECK: stxr w0, x1, [x2] ; GISEL-LABEL: test_store_i64: ; GISEL: stxr w0, x1, [x2] - %res = call i32 @llvm.aarch64.stxr.p0i64(i64 %val, i64* %addr) + %res = call i32 @llvm.aarch64.stxr.p0i64(i64 %val, i64* elementtype(i64) %addr) ret i32 %res } @@ -219,7 +219,7 @@ ; GISEL-LABEL: test_load_acquire_i8: ; GISEL: ldaxrb w[[LOADVAL:[0-9]+]], [x0] ; GISEL-DAG: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldaxr.p0i8(i8* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i8(i8* elementtype(i8) %addr) %shortval = trunc i64 %val to i8 %extval = zext i8 %shortval to i64 store i64 %extval, i64* @var, align 8 @@ -237,7 +237,7 @@ ; GISEL-LABEL: test_load_acquire_i16: ; GISEL: ldaxrh w[[LOADVAL:[0-9]+]], [x0] ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldaxr.p0i16(i16* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i16(i16* elementtype(i16) %addr) %shortval = trunc i64 %val to i16 %extval = zext i16 %shortval to i64 store i64 %extval, i64* @var, align 8 @@ -255,7 +255,7 @@ ; GISEL-LABEL: test_load_acquire_i32: ; GISEL: ldaxr w[[LOADVAL:[0-9]+]], [x0] ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldaxr.p0i32(i32* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) %addr) %shortval = trunc i64 %val to i32 %extval = zext i32 %shortval to i64 store i64 %extval, i64* @var, align 8 @@ -271,7 +271,7 @@ ; GISEL-LABEL: test_load_acquire_i64: ; GISEL: ldaxr x[[LOADVAL:[0-9]+]], [x0] ; GISEL: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var] - %val = call i64 @llvm.aarch64.ldaxr.p0i64(i64* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) %addr) store i64 %val, i64* @var, align 8 ret void } @@ -293,7 +293,7 @@ ; GISEL-NOT: and ; GISEL: stlxrb w0, w1, [x2] %extval = zext i8 %val to i64 - %res = call i32 @llvm.aarch64.stlxr.p0i8(i64 %extval, i8* %addr) + %res = call i32 @llvm.aarch64.stlxr.p0i8(i64 %extval, i8* elementtype(i8) %addr) ret i32 %res } @@ -308,7 +308,7 @@ ; GISEL-NOT: and ; GISEL: stlxrh w0, w1, [x2] %extval = zext i16 %val to i64 - %res = call i32 @llvm.aarch64.stlxr.p0i16(i64 %extval, i16* %addr) + %res = call i32 @llvm.aarch64.stlxr.p0i16(i64 %extval, i16* elementtype(i16) %addr) ret i32 %res } @@ -323,7 +323,7 @@ ; GISEL-NOT: and ; GISEL: stlxr w0, w1, [x2] %extval = zext i32 %val to i64 - %res = call i32 @llvm.aarch64.stlxr.p0i32(i64 %extval, i32* %addr) + %res = call i32 @llvm.aarch64.stlxr.p0i32(i64 %extval, i32* elementtype(i32) %addr) ret i32 %res } @@ -333,7 +333,7 @@ ; CHECK: stlxr w0, x1, [x2] ; GISEL-LABEL: test_store_release_i64: ; GISEL: stlxr w0, x1, [x2] - %res = call i32 @llvm.aarch64.stlxr.p0i64(i64 %val, i64* %addr) + %res = call i32 @llvm.aarch64.stlxr.p0i64(i64 %val, i64* elementtype(i64) %addr) ret i32 %res } diff --git a/llvm/test/CodeGen/AArch64/arm64_32-atomics.ll b/llvm/test/CodeGen/AArch64/arm64_32-atomics.ll --- a/llvm/test/CodeGen/AArch64/arm64_32-atomics.ll +++ b/llvm/test/CodeGen/AArch64/arm64_32-atomics.ll @@ -80,7 +80,7 @@ ; CHECK-LABEL: test_ldxr_8: ; CHECK: ldxrb w0, [x0] - %val = call i64 @llvm.aarch64.ldxr.p0i8(i8* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i8(i8* elementtype(i8) %addr) %val8 = trunc i64 %val to i8 ret i8 %val8 } @@ -89,7 +89,7 @@ ; CHECK-LABEL: test_ldxr_16: ; CHECK: ldxrh w0, [x0] - %val = call i64 @llvm.aarch64.ldxr.p0i16(i16* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i16(i16* elementtype(i16) %addr) %val16 = trunc i64 %val to i16 ret i16 %val16 } @@ -98,7 +98,7 @@ ; CHECK-LABEL: test_ldxr_32: ; CHECK: ldxr w0, [x0] - %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* elementtype(i32) %addr) %val32 = trunc i64 %val to i32 ret i32 %val32 } @@ -107,7 +107,7 @@ ; CHECK-LABEL: test_ldxr_64: ; CHECK: ldxr x0, [x0] - %val = call i64 @llvm.aarch64.ldxr.p0i64(i64* %addr) + %val = call i64 @llvm.aarch64.ldxr.p0i64(i64* elementtype(i64) %addr) ret i64 %val } @@ -120,7 +120,7 @@ ; CHECK-LABEL: test_ldaxr_8: ; CHECK: ldaxrb w0, [x0] - %val = call i64 @llvm.aarch64.ldaxr.p0i8(i8* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i8(i8* elementtype(i8) %addr) %val8 = trunc i64 %val to i8 ret i8 %val8 } @@ -129,7 +129,7 @@ ; CHECK-LABEL: test_ldaxr_16: ; CHECK: ldaxrh w0, [x0] - %val = call i64 @llvm.aarch64.ldaxr.p0i16(i16* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i16(i16* elementtype(i16) %addr) %val16 = trunc i64 %val to i16 ret i16 %val16 } @@ -138,7 +138,7 @@ ; CHECK-LABEL: test_ldaxr_32: ; CHECK: ldaxr w0, [x0] - %val = call i64 @llvm.aarch64.ldaxr.p0i32(i32* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) %addr) %val32 = trunc i64 %val to i32 ret i32 %val32 } @@ -147,7 +147,7 @@ ; CHECK-LABEL: test_ldaxr_64: ; CHECK: ldaxr x0, [x0] - %val = call i64 @llvm.aarch64.ldaxr.p0i64(i64* %addr) + %val = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) %addr) ret i64 %val } @@ -162,7 +162,7 @@ ; CHECK: mov w0, [[TMP]] %extval = zext i8 %val to i64 - %success = call i32 @llvm.aarch64.stxr.p0i8(i64 %extval, i8* %addr) + %success = call i32 @llvm.aarch64.stxr.p0i8(i64 %extval, i8* elementtype(i8) %addr) ret i32 %success } @@ -172,7 +172,7 @@ ; CHECK: mov w0, [[TMP]] %extval = zext i16 %val to i64 - %success = call i32 @llvm.aarch64.stxr.p0i16(i64 %extval, i16* %addr) + %success = call i32 @llvm.aarch64.stxr.p0i16(i64 %extval, i16* elementtype(i16) %addr) ret i32 %success } @@ -182,7 +182,7 @@ ; CHECK: mov w0, [[TMP]] %extval = zext i32 %val to i64 - %success = call i32 @llvm.aarch64.stxr.p0i32(i64 %extval, i32* %addr) + %success = call i32 @llvm.aarch64.stxr.p0i32(i64 %extval, i32* elementtype(i32) %addr) ret i32 %success } @@ -191,7 +191,7 @@ ; CHECK: stxr [[TMP:w[0-9]+]], x1, [x0] ; CHECK: mov w0, [[TMP]] - %success = call i32 @llvm.aarch64.stxr.p0i64(i64 %val, i64* %addr) + %success = call i32 @llvm.aarch64.stxr.p0i64(i64 %val, i64* elementtype(i64) %addr) ret i32 %success } @@ -206,7 +206,7 @@ ; CHECK: mov w0, [[TMP]] %extval = zext i8 %val to i64 - %success = call i32 @llvm.aarch64.stlxr.p0i8(i64 %extval, i8* %addr) + %success = call i32 @llvm.aarch64.stlxr.p0i8(i64 %extval, i8* elementtype(i8) %addr) ret i32 %success } @@ -216,7 +216,7 @@ ; CHECK: mov w0, [[TMP]] %extval = zext i16 %val to i64 - %success = call i32 @llvm.aarch64.stlxr.p0i16(i64 %extval, i16* %addr) + %success = call i32 @llvm.aarch64.stlxr.p0i16(i64 %extval, i16* elementtype(i16) %addr) ret i32 %success } @@ -226,7 +226,7 @@ ; CHECK: mov w0, [[TMP]] %extval = zext i32 %val to i64 - %success = call i32 @llvm.aarch64.stlxr.p0i32(i64 %extval, i32* %addr) + %success = call i32 @llvm.aarch64.stlxr.p0i32(i64 %extval, i32* elementtype(i32) %addr) ret i32 %success } @@ -235,7 +235,7 @@ ; CHECK: stlxr [[TMP:w[0-9]+]], x1, [x0] ; CHECK: mov w0, [[TMP]] - %success = call i32 @llvm.aarch64.stlxr.p0i64(i64 %val, i64* %addr) + %success = call i32 @llvm.aarch64.stlxr.p0i64(i64 %val, i64* elementtype(i64) %addr) ret i32 %success } diff --git a/llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll b/llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll --- a/llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll +++ b/llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll @@ -199,7 +199,7 @@ ; CHECK: ldnt1b { z0.b }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv16i8( %pred, - i8* %addr) + i8* elementtype(i8) %addr) ret %res } @@ -212,7 +212,7 @@ ; CHECK: ldnt1h { z0.h }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv8i16( %pred, - i16* %addr) + i16* elementtype(i16) %addr) ret %res } @@ -221,7 +221,7 @@ ; CHECK: ldnt1h { z0.h }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv8f16( %pred, - half* %addr) + half* elementtype(half) %addr) ret %res } @@ -230,7 +230,7 @@ ; CHECK: ldnt1h { z0.h }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv8bf16( %pred, - bfloat* %addr) + bfloat* elementtype(bfloat) %addr) ret %res } @@ -243,7 +243,7 @@ ; CHECK: ldnt1w { z0.s }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv4i32( %pred, - i32* %addr) + i32* elementtype(i32) %addr) ret %res } @@ -252,7 +252,7 @@ ; CHECK: ldnt1w { z0.s }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv4f32( %pred, - float* %addr) + float* elementtype(float) %addr) ret %res } @@ -265,7 +265,7 @@ ; CHECK: ldnt1d { z0.d }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv2i64( %pred, - i64* %addr) + i64* elementtype(i64) %addr) ret %res } @@ -274,7 +274,7 @@ ; CHECK: ldnt1d { z0.d }, p0/z, [x0] ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.ldnt1.nxv2f64( %pred, - double* %addr) + double* elementtype(double) %addr) ret %res } diff --git a/llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll b/llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll --- a/llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll +++ b/llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll @@ -381,7 +381,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv16i8( %data, %pred, - i8* %addr) + i8* elementtype(i8) %addr) ret void } @@ -395,7 +395,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv8i16( %data, %pred, - i16* %addr) + i16* elementtype(i16) %addr) ret void } @@ -405,7 +405,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv8f16( %data, %pred, - half* %addr) + half* elementtype(half) %addr) ret void } @@ -415,7 +415,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv8bf16( %data, %pred, - bfloat* %addr) + bfloat* elementtype(bfloat) %addr) ret void } @@ -429,7 +429,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv4i32( %data, %pred, - i32* %addr) + i32* elementtype(i32) %addr) ret void } @@ -439,7 +439,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv4f32( %data, %pred, - float* %addr) + float* elementtype(float) %addr) ret void } @@ -453,7 +453,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv2i64( %data, %pred, - i64* %addr) + i64* elementtype(i64) %addr) ret void } @@ -463,7 +463,7 @@ ; CHECK-NEXT: ret call void @llvm.aarch64.sve.stnt1.nxv2f64( %data, %pred, - double* %addr) + double* elementtype(double) %addr) ret void } diff --git a/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-imm.ll b/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-imm.ll --- a/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-imm.ll +++ b/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-imm.ll @@ -17,12 +17,12 @@ %base_load = getelementptr , * %base, i64 8 %base_load_bc = bitcast * %base_load to i64* %data = call @llvm.aarch64.sve.ldnt1.nxv2i64( %mask, - i64* %base_load_bc) + i64* elementtype(i64) %base_load_bc) %base_store = getelementptr , * %base, i64 -9 %base_store_bc = bitcast * %base_store to i64* call void @llvm.aarch64.sve.stnt1.nxv2i64( %data, %mask, - i64* %base_store_bc) + i64* elementtype(i64) %base_store_bc) ret void } @@ -38,12 +38,12 @@ %base_load = getelementptr , * %base, i64 -8 %base_load_bc = bitcast * %base_load to i64* %data = call @llvm.aarch64.sve.ldnt1.nxv2i64( %mask, - i64* %base_load_bc) + i64* elementtype(i64) %base_load_bc) %base_store = getelementptr , * %base, i64 -7 %base_store_bc = bitcast * %base_store to i64* call void @llvm.aarch64.sve.stnt1.nxv2i64( %data, %mask, - i64* %base_store_bc) + i64* elementtype(i64) %base_store_bc) ret void } @@ -56,12 +56,12 @@ %base_load = getelementptr , * %base, i64 -6 %base_load_bc = bitcast * %base_load to double* %data = call @llvm.aarch64.sve.ldnt1.nxv2f64( %mask, - double* %base_load_bc) + double* elementtype(double) %base_load_bc) %base_store = getelementptr , * %base, i64 -5 %base_store_bc = bitcast * %base_store to double* call void @llvm.aarch64.sve.stnt1.nxv2f64( %data, %mask, - double* %base_store_bc) + double* elementtype(double) %base_store_bc) ret void } @@ -76,12 +76,12 @@ %base_load = getelementptr , * %base, i64 6 %base_load_bc = bitcast * %base_load to i32* %data = call @llvm.aarch64.sve.ldnt1.nxv4i32( %mask, - i32* %base_load_bc) + i32* elementtype(i32) %base_load_bc) %base_store = getelementptr , * %base, i64 7 %base_store_bc = bitcast * %base_store to i32* call void @llvm.aarch64.sve.stnt1.nxv4i32( %data, %mask, - i32* %base_store_bc) + i32* elementtype(i32) %base_store_bc) ret void } @@ -94,12 +94,12 @@ %base_load = getelementptr , * %base, i64 -1 %base_load_bc = bitcast * %base_load to float* %data = call @llvm.aarch64.sve.ldnt1.nxv4f32( %mask, - float* %base_load_bc) + float* elementtype(float) %base_load_bc) %base_store = getelementptr , * %base, i64 2 %base_store_bc = bitcast * %base_store to float* call void @llvm.aarch64.sve.stnt1.nxv4f32( %data, %mask, - float* %base_store_bc) + float* elementtype(float) %base_store_bc) ret void } @@ -115,12 +115,12 @@ %base_load = getelementptr , * %base, i64 6 %base_load_bc = bitcast * %base_load to i16* %data = call @llvm.aarch64.sve.ldnt1.nxv8i16( %mask, - i16* %base_load_bc) + i16* elementtype(i16) %base_load_bc) %base_store = getelementptr , * %base, i64 7 %base_store_bc = bitcast * %base_store to i16* call void @llvm.aarch64.sve.stnt1.nxv8i16( %data, %mask, - i16* %base_store_bc) + i16* elementtype(i16) %base_store_bc) ret void } @@ -133,12 +133,12 @@ %base_load = getelementptr , * %base, i64 -1 %base_load_bc = bitcast * %base_load to half* %data = call @llvm.aarch64.sve.ldnt1.nxv8f16( %mask, - half* %base_load_bc) + half* elementtype(half) %base_load_bc) %base_store = getelementptr , * %base, i64 2 %base_store_bc = bitcast * %base_store to half* call void @llvm.aarch64.sve.stnt1.nxv8f16( %data, %mask, - half* %base_store_bc) + half* elementtype(half) %base_store_bc) ret void } @@ -151,12 +151,12 @@ %base_load = getelementptr , * %base, i64 -1 %base_load_bc = bitcast * %base_load to bfloat* %data = call @llvm.aarch64.sve.ldnt1.nxv8bf16( %mask, - bfloat* %base_load_bc) + bfloat* elementtype(bfloat) %base_load_bc) %base_store = getelementptr , * %base, i64 2 %base_store_bc = bitcast * %base_store to bfloat* call void @llvm.aarch64.sve.stnt1.nxv8bf16( %data, %mask, - bfloat* %base_store_bc) + bfloat* elementtype(bfloat) %base_store_bc) ret void } @@ -171,12 +171,12 @@ %base_load = getelementptr , * %base, i64 6 %base_load_bc = bitcast * %base_load to i8* %data = call @llvm.aarch64.sve.ldnt1.nxv16i8( %mask, - i8* %base_load_bc) + i8* elementtype(i8) %base_load_bc) %base_store = getelementptr , * %base, i64 7 %base_store_bc = bitcast * %base_store to i8* call void @llvm.aarch64.sve.stnt1.nxv16i8( %data, %mask, - i8* %base_store_bc) + i8* elementtype(i8) %base_store_bc) ret void } diff --git a/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-reg.ll b/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-reg.ll --- a/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-reg.ll +++ b/llvm/test/CodeGen/AArch64/sve-pred-non-temporal-ldst-addressing-mode-reg-reg.ll @@ -9,10 +9,10 @@ ; CHECK-NEXT: ret %gep = getelementptr i64, i64* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv2i64( %mask, - i64* %gep) + i64* elementtype(i64) %gep) call void @llvm.aarch64.sve.stnt1.nxv2i64( %data, %mask, - i64* %gep) + i64* elementtype(i64) %gep) ret void } @@ -23,10 +23,10 @@ ; CHECK-NEXT: ret %gep = getelementptr double, double* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv2f64( %mask, - double* %gep) + double* elementtype(double) %gep) call void @llvm.aarch64.sve.stnt1.nxv2f64( %data, %mask, - double* %gep) + double* elementtype(double) %gep) ret void } @@ -39,10 +39,10 @@ ; CHECK-NEXT: ret %gep = getelementptr i32, i32* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv4i32( %mask, - i32* %gep) + i32* elementtype(i32) %gep) call void @llvm.aarch64.sve.stnt1.nxv4i32( %data, %mask, - i32* %gep) + i32* elementtype(i32) %gep) ret void } @@ -53,10 +53,10 @@ ; CHECK-NEXT: ret %gep = getelementptr float, float* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv4f32( %mask, - float* %gep) + float* elementtype(float) %gep) call void @llvm.aarch64.sve.stnt1.nxv4f32( %data, %mask, - float* %gep) + float* elementtype(float) %gep) ret void } @@ -70,10 +70,10 @@ ; CHECK-NEXT: ret %gep = getelementptr i16, i16* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv8i16( %mask, - i16* %gep) + i16* elementtype(i16) %gep) call void @llvm.aarch64.sve.stnt1.nxv8i16( %data, %mask, - i16* %gep) + i16* elementtype(i16) %gep) ret void } @@ -84,10 +84,10 @@ ; CHECK-NEXT: ret %gep = getelementptr half, half* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv8f16( %mask, - half* %gep) + half* elementtype(half) %gep) call void @llvm.aarch64.sve.stnt1.nxv8f16( %data, %mask, - half* %gep) + half* elementtype(half) %gep) ret void } @@ -98,10 +98,10 @@ ; CHECK-NEXT: ret %gep = getelementptr bfloat, bfloat* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv8bf16( %mask, - bfloat* %gep) + bfloat* elementtype(bfloat) %gep) call void @llvm.aarch64.sve.stnt1.nxv8bf16( %data, %mask, - bfloat* %gep) + bfloat* elementtype(bfloat) %gep) ret void } @@ -114,10 +114,10 @@ ; CHECK-NEXT: ret %gep = getelementptr i8, i8* %base, i64 %offset %data = call @llvm.aarch64.sve.ldnt1.nxv16i8( %mask, - i8* %gep) + i8* elementtype(i8) %gep) call void @llvm.aarch64.sve.stnt1.nxv16i8( %data, %mask, - i8* %gep) + i8* elementtype(i8) %gep) ret void } diff --git a/llvm/test/Transforms/AtomicExpand/AArch64/expand-atomicrmw-xchg-fp.ll b/llvm/test/Transforms/AtomicExpand/AArch64/expand-atomicrmw-xchg-fp.ll --- a/llvm/test/Transforms/AtomicExpand/AArch64/expand-atomicrmw-xchg-fp.ll +++ b/llvm/test/Transforms/AtomicExpand/AArch64/expand-atomicrmw-xchg-fp.ll @@ -8,10 +8,10 @@ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast half [[VAL:%.*]] to i16 ; CHECK-NEXT: br label [[ATOMICRMW_START:%.*]] ; CHECK: atomicrmw.start: -; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* [[TMP1]]) +; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* elementtype(i16) [[TMP1]]) ; CHECK-NEXT: [[TMP4:%.*]] = trunc i64 [[TMP3]] to i16 ; CHECK-NEXT: [[TMP5:%.*]] = zext i16 [[TMP2]] to i64 -; CHECK-NEXT: [[TMP6:%.*]] = call i32 @llvm.aarch64.stxr.p0i16(i64 [[TMP5]], i16* [[TMP1]]) +; CHECK-NEXT: [[TMP6:%.*]] = call i32 @llvm.aarch64.stxr.p0i16(i64 [[TMP5]], i16* elementtype(i16) [[TMP1]]) ; CHECK-NEXT: [[TRYAGAIN:%.*]] = icmp ne i32 [[TMP6]], 0 ; CHECK-NEXT: br i1 [[TRYAGAIN]], label [[ATOMICRMW_START]], label [[ATOMICRMW_END:%.*]] ; CHECK: atomicrmw.end: @@ -35,10 +35,10 @@ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast float [[VAL:%.*]] to i32 ; CHECK-NEXT: br label [[ATOMICRMW_START:%.*]] ; CHECK: atomicrmw.start: -; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[TMP1]]) +; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* elementtype(i32) [[TMP1]]) ; CHECK-NEXT: [[TMP4:%.*]] = trunc i64 [[TMP3]] to i32 ; CHECK-NEXT: [[TMP5:%.*]] = zext i32 [[TMP2]] to i64 -; CHECK-NEXT: [[TMP6:%.*]] = call i32 @llvm.aarch64.stxr.p0i32(i64 [[TMP5]], i32* [[TMP1]]) +; CHECK-NEXT: [[TMP6:%.*]] = call i32 @llvm.aarch64.stxr.p0i32(i64 [[TMP5]], i32* elementtype(i32) [[TMP1]]) ; CHECK-NEXT: [[TRYAGAIN:%.*]] = icmp ne i32 [[TMP6]], 0 ; CHECK-NEXT: br i1 [[TRYAGAIN]], label [[ATOMICRMW_START]], label [[ATOMICRMW_END:%.*]] ; CHECK: atomicrmw.end: @@ -62,8 +62,8 @@ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast double [[VAL:%.*]] to i64 ; CHECK-NEXT: br label [[ATOMICRMW_START:%.*]] ; CHECK: atomicrmw.start: -; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP1]]) -; CHECK-NEXT: [[TMP4:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[TMP2]], i64* [[TMP1]]) +; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* elementtype(i64) [[TMP1]]) +; CHECK-NEXT: [[TMP4:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[TMP2]], i64* elementtype(i64) [[TMP1]]) ; CHECK-NEXT: [[TRYAGAIN:%.*]] = icmp ne i32 [[TMP4]], 0 ; CHECK-NEXT: br i1 [[TRYAGAIN]], label [[ATOMICRMW_START]], label [[ATOMICRMW_END:%.*]] ; CHECK: atomicrmw.end: diff --git a/llvm/test/Transforms/ConstantHoisting/AArch64/const-hoist-intrinsics.ll b/llvm/test/Transforms/ConstantHoisting/AArch64/const-hoist-intrinsics.ll --- a/llvm/test/Transforms/ConstantHoisting/AArch64/const-hoist-intrinsics.ll +++ b/llvm/test/Transforms/ConstantHoisting/AArch64/const-hoist-intrinsics.ll @@ -9,26 +9,26 @@ ; CHECK-NEXT: [[CONST:%.*]] = bitcast i64 -9223372036317904832 to i64 ; CHECK-NEXT: [[PTR_0:%.*]] = getelementptr i64, i64* [[PTR:%.*]], i64 0 ; CHECK-NEXT: [[CONST_MAT:%.*]] = add i64 [[CONST]], -64 -; CHECK-NEXT: [[BAR_0:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST_MAT]], i64* [[PTR_0]]) +; CHECK-NEXT: [[BAR_0:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST_MAT]], i64* elementtype(i64) [[PTR_0]]) ; CHECK-NEXT: [[PTR_1:%.*]] = getelementptr i64, i64* [[PTR]], i64 1 -; CHECK-NEXT: [[BAR_1:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST]], i64* [[PTR_1]]) +; CHECK-NEXT: [[BAR_1:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST]], i64* elementtype(i64) [[PTR_1]]) ; CHECK-NEXT: [[PTR_2:%.*]] = getelementptr i64, i64* [[PTR]], i64 2 ; CHECK-NEXT: [[CONST_MAT1:%.*]] = add i64 [[CONST]], 64 -; CHECK-NEXT: [[BAR_2:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST_MAT1]], i64* [[PTR_2]]) +; CHECK-NEXT: [[BAR_2:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST_MAT1]], i64* elementtype(i64) [[PTR_2]]) ; CHECK-NEXT: [[PTR_3:%.*]] = getelementptr i64, i64* [[PTR]], i64 3 ; CHECK-NEXT: [[CONST_MAT2:%.*]] = add i64 [[CONST]], 128 -; CHECK-NEXT: [[BAR_3:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST_MAT2]], i64* [[PTR_3]]) +; CHECK-NEXT: [[BAR_3:%.*]] = call i32 @llvm.aarch64.stxr.p0i64(i64 [[CONST_MAT2]], i64* elementtype(i64) [[PTR_3]]) ; CHECK-NEXT: ret void ; entry: %ptr.0 = getelementptr i64, i64* %ptr, i64 0 - %bar.0 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904896, i64* %ptr.0) + %bar.0 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904896, i64* elementtype(i64) %ptr.0) %ptr.1 = getelementptr i64, i64* %ptr, i64 1 - %bar.1 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904832, i64* %ptr.1) + %bar.1 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904832, i64* elementtype(i64) %ptr.1) %ptr.2 = getelementptr i64, i64* %ptr, i64 2 - %bar.2 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904768, i64* %ptr.2) + %bar.2 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904768, i64* elementtype(i64) %ptr.2) %ptr.3 = getelementptr i64, i64* %ptr, i64 3 - %bar.3 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904704, i64* %ptr.3) + %bar.3 = call i32 @llvm.aarch64.stxr.p0i64(i64 -9223372036317904704, i64* elementtype(i64) %ptr.3) ret void }