diff options
| author | Michael Liao <michael.liao@intel.com> | 2013-10-15 17:51:58 +0000 | 
|---|---|---|
| committer | Michael Liao <michael.liao@intel.com> | 2013-10-15 17:51:58 +0000 | 
| commit | ad71659def09fecdcebd6683128c533eb479dae8 (patch) | |
| tree | 24f6d0a3d4a572c4b0cfac87bec874df201229d8 /llvm | |
| parent | 8ba068211d7e2a5976cad7272465c20efa0ce8a6 (diff) | |
| download | bcm5719-llvm-ad71659def09fecdcebd6683128c533eb479dae8.tar.gz bcm5719-llvm-ad71659def09fecdcebd6683128c533eb479dae8.zip  | |
Fix PR17546
- Type of index used in extract_vector_elt or insert_vector_elt supposes
  to be TLI.getVectorIdxTy() which is pointer type on most targets. It'd
  better to truncate (or zero-extend in case it's changed later) it to
  mask element type to guarantee they are matching instead of asserting
  that.
llvm-svn: 192722
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 7 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/pr17546.ll | 10 | 
2 files changed, 11 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 8e3a4d747aa..54d824419fd 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -7627,12 +7627,7 @@ X86TargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,        MVT MaskVT = MVT::getVectorVT(MaskEltVT, VecVT.getSizeInBits() /                                      MaskEltVT.getSizeInBits()); -      if (Idx.getSimpleValueType() != MaskEltVT) -        if (Idx.getOpcode() == ISD::ZERO_EXTEND || -            Idx.getOpcode() == ISD::SIGN_EXTEND) -          Idx = Idx.getOperand(0); -      assert(Idx.getSimpleValueType() == MaskEltVT && -             "Unexpected index in insertelement"); +      Idx = DAG.getZExtOrTrunc(Idx, dl, MaskEltVT);        SDValue Mask = DAG.getNode(X86ISD::VINSERT, dl, MaskVT,                                  getZeroVector(MaskVT, Subtarget, DAG, dl),                                  Idx, DAG.getConstant(0, getPointerTy())); diff --git a/llvm/test/CodeGen/X86/pr17546.ll b/llvm/test/CodeGen/X86/pr17546.ll new file mode 100644 index 00000000000..174fa5ca3fc --- /dev/null +++ b/llvm/test/CodeGen/X86/pr17546.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s -mtriple=x86_64-linux-gnu -mcpu=core-avx2 | FileCheck %s + +define i32 @f_f___un_3C_unf_3E_un_3C_unf_3E_(<8 x i32> %__mask, i64 %BBBB) { +  %QQQ = trunc i64 %BBBB to i32 +  %1 = extractelement <8 x i32> %__mask, i32 %QQQ +  ret i32 %1 +} + +; CHECK: f_f___un_3C_unf_3E_un_3C_unf_3E_ +; CHECK: ret  | 

