mirror of
https://github.com/intel/llvm.git
synced 2026-01-19 17:45:07 +08:00
Don't assume that a store source is a vector type just because the destination is (PR26099)
llvm-svn: 304465
This commit is contained in:
@@ -1487,9 +1487,9 @@ void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, Address Addr,
|
||||
// Handle vectors differently to get better performance.
|
||||
if (Ty->isVectorType()) {
|
||||
llvm::Type *SrcTy = Value->getType();
|
||||
auto *VecTy = cast<llvm::VectorType>(SrcTy);
|
||||
auto *VecTy = dyn_cast<llvm::VectorType>(SrcTy);
|
||||
// Handle vec3 special.
|
||||
if (VecTy->getNumElements() == 3) {
|
||||
if (VecTy && VecTy->getNumElements() == 3) {
|
||||
// Our source is a vec3, do a shuffle vector to make it a vec4.
|
||||
llvm::Constant *Mask[] = {Builder.getInt32(0), Builder.getInt32(1),
|
||||
Builder.getInt32(2),
|
||||
|
||||
12
clang/test/CodeGen/pr26099.c
Normal file
12
clang/test/CodeGen/pr26099.c
Normal file
@@ -0,0 +1,12 @@
|
||||
// RUN: %clang_cc1 -ffreestanding %s -triple=i686-apple-darwin -target-feature +mmx -emit-llvm -o - -Wall -Werror
|
||||
// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +mmx -emit-llvm -o - -Wall -Werror
|
||||
// REQUIRES: asserts
|
||||
|
||||
#include <x86intrin.h>
|
||||
|
||||
int __attribute__ ((__vector_size__ (8))) b;
|
||||
|
||||
void bar(int a)
|
||||
{
|
||||
b = __builtin_ia32_vec_init_v2si (0, a);
|
||||
}
|
||||
Reference in New Issue
Block a user