<rdar://problem/8228022> Wvector-conversions warnings in arm_neon.h

Explicitly cast arguments to the type the builtin expects, which is <vN x i8>



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114596 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nate Begeman
2010-09-22 22:28:42 +00:00
parent b68987e4bf
commit e5cb26fab9

View File

@@ -89,7 +89,7 @@ static char Narrow(const char t) {
return 'i'; return 'i';
case 'f': case 'f':
return 'h'; return 'h';
default: throw "unhandled type in widen!"; default: throw "unhandled type in narrow!";
} }
return '\0'; return '\0';
} }
@@ -155,6 +155,10 @@ static char ModType(const char mod, char type, bool &quad, bool &poly,
case 'n': case 'n':
type = Widen(type); type = Widen(type);
break; break;
case 'i':
type = 'i';
scal = true;
break;
case 'l': case 'l':
type = 'l'; type = 'l';
scal = true; scal = true;
@@ -807,14 +811,27 @@ static std::string GenBuiltin(const std::string &name, const std::string &proto,
for (unsigned i = 1, e = proto.size(); i != e; ++i, ++arg) { for (unsigned i = 1, e = proto.size(); i != e; ++i, ++arg) {
std::string args = std::string(&arg, 1); std::string args = std::string(&arg, 1);
bool argquad = quad;
bool scal = false;
(void) ModType(proto[i], type, argquad, dummy, dummy, scal, dummy, dummy);
bool explicitcast = define && !scal;
if (define) if (define)
args = "(" + args + ")"; args = "(" + args + ")";
if (explicitcast) {
unsigned builtinelts = quad ? 16 : 8;
args = "(__neon_int8x" + utostr(builtinelts) + "_t)(" + args;
}
// Handle multiple-vector values specially, emitting each subvector as an // Handle multiple-vector values specially, emitting each subvector as an
// argument to the __builtin. // argument to the __builtin.
if (structTypes && (proto[i] == '2' || proto[i] == '3' || proto[i] == '4')){ if (structTypes && (proto[i] >= '2') && (proto[i] <= '4')) {
for (unsigned vi = 0, ve = proto[i] - '0'; vi != ve; ++vi) { for (unsigned vi = 0, ve = proto[i] - '0'; vi != ve; ++vi) {
s += args + ".val[" + utostr(vi) + "].val"; s += args + ".val[" + utostr(vi) + "].val";
if (explicitcast)
s += ")";
if ((vi + 1) < ve) if ((vi + 1) < ve)
s += ", "; s += ", ";
} }
@@ -829,10 +846,10 @@ static std::string GenBuiltin(const std::string &name, const std::string &proto,
else else
s += args; s += args;
if (structTypes && proto[i] != 's' && proto[i] != 'i' && proto[i] != 'l' && if (structTypes && !scal)
proto[i] != 'p' && proto[i] != 'c' && proto[i] != 'a') {
s += ".val"; s += ".val";
} if (explicitcast)
s += ")";
if ((i + 1) < e) if ((i + 1) < e)
s += ", "; s += ", ";
} }