Skip to content

Commit e47f2cd

Browse files
committed
[X86] Merge (near) duplicate scalar non-temporal store code. NFCI.
llvm-svn: 286595
1 parent 8c140e0 commit e47f2cd

File tree

1 file changed

+10
-20
lines changed

1 file changed

+10
-20
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7514,36 +7514,26 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
75147514
}
75157515

75167516
case X86::BI__builtin_ia32_movnti:
7517-
case X86::BI__builtin_ia32_movnti64: {
7518-
llvm::MDNode *Node = llvm::MDNode::get(
7519-
getLLVMContext(), llvm::ConstantAsMetadata::get(Builder.getInt32(1)));
7520-
7521-
// Convert the type of the pointer to a pointer to the stored type.
7522-
Value *BC = Builder.CreateBitCast(Ops[0],
7523-
llvm::PointerType::getUnqual(Ops[1]->getType()),
7524-
"cast");
7525-
StoreInst *SI = Builder.CreateDefaultAlignedStore(Ops[1], BC);
7526-
SI->setMetadata(CGM.getModule().getMDKindID("nontemporal"), Node);
7527-
7528-
// No alignment for scalar intrinsic store.
7529-
SI->setAlignment(1);
7530-
return SI;
7531-
}
7517+
case X86::BI__builtin_ia32_movnti64:
75327518
case X86::BI__builtin_ia32_movntsd:
75337519
case X86::BI__builtin_ia32_movntss: {
75347520
llvm::MDNode *Node = llvm::MDNode::get(
75357521
getLLVMContext(), llvm::ConstantAsMetadata::get(Builder.getInt32(1)));
75367522

7523+
Value *Ptr = Ops[0];
7524+
Value *Src = Ops[1];
7525+
75377526
// Extract the 0'th element of the source vector.
7538-
Value *Scl = Builder.CreateExtractElement(Ops[1], (uint64_t)0, "extract");
7527+
if (BuiltinID == X86::BI__builtin_ia32_movntsd ||
7528+
BuiltinID == X86::BI__builtin_ia32_movntss)
7529+
Src = Builder.CreateExtractElement(Src, (uint64_t)0, "extract");
75397530

75407531
// Convert the type of the pointer to a pointer to the stored type.
7541-
Value *BC = Builder.CreateBitCast(Ops[0],
7542-
llvm::PointerType::getUnqual(Scl->getType()),
7543-
"cast");
7532+
Value *BC = Builder.CreateBitCast(
7533+
Ptr, llvm::PointerType::getUnqual(Src->getType()), "cast");
75447534

75457535
// Unaligned nontemporal store of the scalar value.
7546-
StoreInst *SI = Builder.CreateDefaultAlignedStore(Scl, BC);
7536+
StoreInst *SI = Builder.CreateDefaultAlignedStore(Src, BC);
75477537
SI->setMetadata(CGM.getModule().getMDKindID("nontemporal"), Node);
75487538
SI->setAlignment(1);
75497539
return SI;

0 commit comments

Comments
 (0)