mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-12 01:18:53 +00:00
7cd5876e60
This patch teaches clang to perform implicit scalar to vector conversions when one of the operands of a binary vector expression is a scalar which can be converted to the element type of the vector without truncation following GCC's implementation. If the (constant) scalar is can be casted safely, it is implicitly casted to the vector elements type and splatted to produce a vector of the same type. Contributions from: Petar Jovanovic Reviewers: bruno, vkalintiris Differential Revision: https://reviews.llvm.org/D25866 llvm-svn: 302935
10 lines
503 B
C++
10 lines
503 B
C++
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fno-lax-vector-conversions -verify %s
|
|
typedef unsigned int __attribute__((vector_size (16))) vUInt32;
|
|
typedef int __attribute__((vector_size (16))) vSInt32;
|
|
|
|
vSInt32 foo (vUInt32 a) {
|
|
vSInt32 b = { 0, 0, 0, 0 };
|
|
b += a; // expected-error{{cannot convert between vector type 'vUInt32' (vector of 4 'unsigned int' values) and vector type 'vSInt32' (vector of 4 'int' values) as implicit conversion would cause truncation}}
|
|
return b;
|
|
}
|