Skip to content

Commit

Permalink
Fix a bug introduced by rL334850
Browse files Browse the repository at this point in the history
Summary: All *_sqrt_round_s[s|d] intrinsics should execute a square root on
zeroth element from B (Ops[1]) and insert in to A (Ops[0]), not the other way around.

Reviewers: itaraban, craig.topper

Reviewed By: craig.topper

Subscribers: craig.topper, cfe-commits

Differential Revision: https://reviews.llvm.org/D48288

llvm-svn: 334964
  • Loading branch information
tkrupa-intel committed Jun 18, 2018
1 parent 5460173 commit 83ba6fa
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions clang/lib/CodeGen/CGBuiltin.cpp
Expand Up @@ -9907,15 +9907,15 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
Intrinsic::x86_avx512_mask_sqrt_ss;
return Builder.CreateCall(CGM.getIntrinsic(IID), Ops);
}
Value *A = Builder.CreateExtractElement(Ops[0], (uint64_t)0);
Value *A = Builder.CreateExtractElement(Ops[1], (uint64_t)0);
Function *F = CGM.getIntrinsic(Intrinsic::sqrt, A->getType());
Value *Src = Builder.CreateExtractElement(Ops[2], (uint64_t)0);
int MaskSize = Ops[3]->getType()->getScalarSizeInBits();
llvm::Type *MaskTy = llvm::VectorType::get(Builder.getInt1Ty(), MaskSize);
Value *Mask = Builder.CreateBitCast(Ops[3], MaskTy);
Mask = Builder.CreateExtractElement(Mask, (uint64_t)0);
A = Builder.CreateSelect(Mask, Builder.CreateCall(F, {A}), Src);
return Builder.CreateInsertElement(Ops[1], A, (uint64_t)0);
return Builder.CreateInsertElement(Ops[0], A, (uint64_t)0);
}
case X86::BI__builtin_ia32_sqrtpd256:
case X86::BI__builtin_ia32_sqrtpd:
Expand Down

0 comments on commit 83ba6fa

Please sign in to comment.