mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-14 15:56:32 +00:00
[KeyInstr][Clang] Store-like builtin atoms
This commit is contained in:
parent
6741ef34bd
commit
5408901bc6
@ -4100,7 +4100,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Value *SizeVal = EmitScalarExpr(E->getArg(1));
|
||||
EmitNonNullArgCheck(Dest, E->getArg(0)->getType(),
|
||||
E->getArg(0)->getExprLoc(), FD, 0);
|
||||
Builder.CreateMemSet(Dest, Builder.getInt8(0), SizeVal, false);
|
||||
auto *I = Builder.CreateMemSet(Dest, Builder.getInt8(0), SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(nullptr);
|
||||
}
|
||||
|
||||
@ -4115,7 +4116,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
EmitNonNullArgCheck(RValue::get(Dest.emitRawPointer(*this)),
|
||||
E->getArg(1)->getType(), E->getArg(1)->getExprLoc(), FD,
|
||||
0);
|
||||
Builder.CreateMemMove(Dest, Src, SizeVal, false);
|
||||
auto *I = Builder.CreateMemMove(Dest, Src, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(nullptr);
|
||||
}
|
||||
|
||||
@ -4128,7 +4130,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Value *SizeVal = EmitScalarExpr(E->getArg(2));
|
||||
EmitArgCheck(TCK_Store, Dest, E->getArg(0), 0);
|
||||
EmitArgCheck(TCK_Load, Src, E->getArg(1), 1);
|
||||
Builder.CreateMemCpy(Dest, Src, SizeVal, false);
|
||||
auto *I = Builder.CreateMemCpy(Dest, Src, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
if (BuiltinID == Builtin::BImempcpy ||
|
||||
BuiltinID == Builtin::BI__builtin_mempcpy)
|
||||
return RValue::get(Builder.CreateInBoundsGEP(
|
||||
@ -4144,7 +4147,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
E->getArg(2)->EvaluateKnownConstInt(getContext()).getZExtValue();
|
||||
EmitArgCheck(TCK_Store, Dest, E->getArg(0), 0);
|
||||
EmitArgCheck(TCK_Load, Src, E->getArg(1), 1);
|
||||
Builder.CreateMemCpyInline(Dest, Src, Size);
|
||||
auto *I = Builder.CreateMemCpyInline(Dest, Src, Size);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(nullptr);
|
||||
}
|
||||
|
||||
@ -4165,7 +4169,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Address Dest = EmitPointerWithAlignment(E->getArg(0));
|
||||
Address Src = EmitPointerWithAlignment(E->getArg(1));
|
||||
Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
|
||||
Builder.CreateMemCpy(Dest, Src, SizeVal, false);
|
||||
auto *I = Builder.CreateMemCpy(Dest, Src, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(Dest, *this);
|
||||
}
|
||||
|
||||
@ -4191,7 +4196,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Address Dest = EmitPointerWithAlignment(E->getArg(0));
|
||||
Address Src = EmitPointerWithAlignment(E->getArg(1));
|
||||
Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
|
||||
Builder.CreateMemMove(Dest, Src, SizeVal, false);
|
||||
auto *I = Builder.CreateMemMove(Dest, Src, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(Dest, *this);
|
||||
}
|
||||
|
||||
@ -4202,7 +4208,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Value *SizeVal = EmitScalarExpr(E->getArg(2));
|
||||
EmitArgCheck(TCK_Store, Dest, E->getArg(0), 0);
|
||||
EmitArgCheck(TCK_Load, Src, E->getArg(1), 1);
|
||||
Builder.CreateMemMove(Dest, Src, SizeVal, false);
|
||||
auto *I = Builder.CreateMemMove(Dest, Src, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(Dest, *this);
|
||||
}
|
||||
case Builtin::BImemset:
|
||||
@ -4213,7 +4220,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Value *SizeVal = EmitScalarExpr(E->getArg(2));
|
||||
EmitNonNullArgCheck(Dest, E->getArg(0)->getType(),
|
||||
E->getArg(0)->getExprLoc(), FD, 0);
|
||||
Builder.CreateMemSet(Dest, ByteVal, SizeVal, false);
|
||||
auto *I = Builder.CreateMemSet(Dest, ByteVal, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(Dest, *this);
|
||||
}
|
||||
case Builtin::BI__builtin_memset_inline: {
|
||||
@ -4225,7 +4233,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
EmitNonNullArgCheck(RValue::get(Dest.emitRawPointer(*this)),
|
||||
E->getArg(0)->getType(), E->getArg(0)->getExprLoc(), FD,
|
||||
0);
|
||||
Builder.CreateMemSetInline(Dest, ByteVal, Size);
|
||||
auto *I = Builder.CreateMemSetInline(Dest, ByteVal, Size);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(nullptr);
|
||||
}
|
||||
case Builtin::BI__builtin___memset_chk: {
|
||||
@ -4242,7 +4251,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
Value *ByteVal = Builder.CreateTrunc(EmitScalarExpr(E->getArg(1)),
|
||||
Builder.getInt8Ty());
|
||||
Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
|
||||
Builder.CreateMemSet(Dest, ByteVal, SizeVal, false);
|
||||
auto *I = Builder.CreateMemSet(Dest, ByteVal, SizeVal, false);
|
||||
addInstToNewSourceAtom(I, nullptr);
|
||||
return RValue::get(Dest, *this);
|
||||
}
|
||||
case Builtin::BI__builtin_wmemchr: {
|
||||
|
@ -8,6 +8,7 @@
|
||||
typedef float m2x2 __attribute__((matrix_type(2, 2)));
|
||||
m2x2 mat;
|
||||
float f4[4];
|
||||
float f8[8];
|
||||
|
||||
void fun() {
|
||||
// CHECK: %a = alloca ptr, align 8
|
||||
@ -23,6 +24,39 @@ void fun() {
|
||||
|
||||
// CHECK: call void @llvm.matrix.column.major.store.v4f32{{.*}}, !dbg [[G3R1:!.*]]
|
||||
__builtin_matrix_column_major_store(mat, f4, sizeof(float) * 2);
|
||||
|
||||
// CHECK: call void @llvm.memset{{.*}}, !dbg [[G4R1:!.*]]
|
||||
__builtin_bzero(f4, sizeof(float) * 2);
|
||||
|
||||
// CHECK: call void @llvm.memmove{{.*}}, !dbg [[G5R1:!.*]]
|
||||
__builtin_bcopy(f4, f8, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memcpy{{.*}}, !dbg [[G6R1:!.*]]
|
||||
__builtin_memcpy(f4, f8, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memcpy{{.*}}, !dbg [[G7R1:!.*]]
|
||||
__builtin_mempcpy(f4, f8, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memcpy{{.*}}, !dbg [[G8R1:!.*]]
|
||||
__builtin_memcpy_inline(f4, f8, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memcpy{{.*}}, !dbg [[G9R1:!.*]]
|
||||
__builtin___memcpy_chk(f4, f8, sizeof(float) * 4, -1);
|
||||
|
||||
// CHECK: call void @llvm.memmove{{.*}}, !dbg [[G10R1:!.*]]
|
||||
__builtin___memmove_chk(f4, f8, sizeof(float) * 4, -1);
|
||||
|
||||
// CHECK: call void @llvm.memmove{{.*}}, !dbg [[G11R1:!.*]]
|
||||
__builtin_memmove(f4, f8, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memset{{.*}}, !dbg [[G12R1:!.*]]
|
||||
__builtin_memset(f4, 0, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memset{{.*}}, !dbg [[G13R1:!.*]]
|
||||
__builtin_memset_inline(f4, 0, sizeof(float) * 4);
|
||||
|
||||
// CHECK: call void @llvm.memset{{.*}}, !dbg [[G14R1:!.*]]
|
||||
__builtin___memset_chk(f4, 0, sizeof(float), -1);
|
||||
}
|
||||
|
||||
// CHECK: [[G1R2]] = !DILocation({{.*}}, atomGroup: 1, atomRank: 2)
|
||||
@ -30,3 +64,14 @@ void fun() {
|
||||
// CHECK: [[G2R2]] = !DILocation({{.*}}, atomGroup: 2, atomRank: 2)
|
||||
// CHECK: [[G2R1]] = !DILocation({{.*}}, atomGroup: 2, atomRank: 1)
|
||||
// CHECK: [[G3R1]] = !DILocation({{.*}}, atomGroup: 3, atomRank: 1)
|
||||
// CHECK: [[G4R1]] = !DILocation({{.*}}, atomGroup: 4, atomRank: 1)
|
||||
// CHECK: [[G5R1]] = !DILocation({{.*}}, atomGroup: 5, atomRank: 1)
|
||||
// CHECK: [[G6R1]] = !DILocation({{.*}}, atomGroup: 6, atomRank: 1)
|
||||
// CHECK: [[G7R1]] = !DILocation({{.*}}, atomGroup: 7, atomRank: 1)
|
||||
// CHECK: [[G8R1]] = !DILocation({{.*}}, atomGroup: 8, atomRank: 1)
|
||||
// CHECK: [[G9R1]] = !DILocation({{.*}}, atomGroup: 9, atomRank: 1)
|
||||
// CHECK: [[G10R1]] = !DILocation({{.*}}, atomGroup: 10, atomRank: 1)
|
||||
// CHECK: [[G11R1]] = !DILocation({{.*}}, atomGroup: 11, atomRank: 1)
|
||||
// CHECK: [[G12R1]] = !DILocation({{.*}}, atomGroup: 12, atomRank: 1)
|
||||
// CHECK: [[G13R1]] = !DILocation({{.*}}, atomGroup: 13, atomRank: 1)
|
||||
// CHECK: [[G14R1]] = !DILocation({{.*}}, atomGroup: 14, atomRank: 1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user