[llvm-commits] [124234] Change LLVM_TARGET_INTRINSIC_LOWER to not implicitly return.
clattner at apple.com
clattner at apple.com
Mon Feb 26 08:30:04 PST 2007
Revision: 124234
Author: clattner
Date: 2007-02-23 20:15:35 -0800 (Fri, 23 Feb 2007)
Log Message:
-----------
Change LLVM_TARGET_INTRINSIC_LOWER to not implicitly return.
Change LLVM_TARGET_INTRINSIC_LOWER to pass in the exp of the call.
Change llvm-i386.c to emit an error on a bogus _mm_shuffle_epi32, instead
of producing an arcane error message from llvm stuff.
Modified Paths:
--------------
apple-local/branches/llvm/gcc/config/i386/i386.h
apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp
apple-local/branches/llvm/gcc/config/rs6000/llvm-rs6000.cpp
apple-local/branches/llvm/gcc/config/rs6000/rs6000.h
apple-local/branches/llvm/gcc/llvm-convert.cpp
apple-local/branches/llvm/gcc/llvm-internal.h
Modified: apple-local/branches/llvm/gcc/config/i386/i386.h
===================================================================
--- apple-local/branches/llvm/gcc/config/i386/i386.h 2007-02-23 20:14:43 UTC (rev 124233)
+++ apple-local/branches/llvm/gcc/config/i386/i386.h 2007-02-24 04:15:35 UTC (rev 124234)
@@ -4059,12 +4059,12 @@
* macro should call the target TreeToLLVM::TargetIntrinsicLower method and
* return true.This macro is invoked from a method in the TreeToLLVM class.
*/
-#define LLVM_TARGET_INTRINSIC_LOWER(BUILTIN_CODE, DESTLOC, RESULT, \
+#define LLVM_TARGET_INTRINSIC_LOWER(EXP, BUILTIN_CODE, DESTLOC, RESULT, \
DESTTY, OPS, ARGS, CURBB, \
RESISSIGNED, EXPISSIGNED) \
- return TargetIntrinsicLower(BUILTIN_CODE, DESTLOC, RESULT, \
- DESTTY, OPS, ARGS, CURBB, \
- RESISSIGNED, EXPISSIGNED);
+ TargetIntrinsicLower(EXP, BUILTIN_CODE, DESTLOC, RESULT, \
+ DESTTY, OPS, ARGS, CURBB, \
+ RESISSIGNED, EXPISSIGNED);
/* APPLE LOCAL end LLVM */
/*
Modified: apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp
===================================================================
--- apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp 2007-02-23 20:14:43 UTC (rev 124233)
+++ apple-local/branches/llvm/gcc/config/i386/llvm-i386.cpp 2007-02-24 04:15:35 UTC (rev 124234)
@@ -30,6 +30,10 @@
#include "llvm/Intrinsics.h"
#include "llvm/Module.h"
+extern "C" {
+#include "toplev.h"
+}
+
/* TargetIntrinsicCastResult - This function just provides a frequently * used sequence for use inside TargetIntrinsicLower. */
static void TargetIntrinsicCastResult(Value *&Result, const Type *ResultType,
bool ResIsSigned, bool ExpIsSigned,
@@ -48,7 +52,8 @@
* LLVM code, emit the code now. If we can handle the code, this macro should
* emit the code, return true.
*/
-bool TreeToLLVM::TargetIntrinsicLower(unsigned FnCode,
+bool TreeToLLVM::TargetIntrinsicLower(tree exp,
+ unsigned FnCode,
Value *DestLoc,
Value *&Result,
const Type *ResultType,
@@ -280,9 +285,12 @@
Result = BuildVectorShuffle(Ops[0], Ops[1],
((EV & 0x03) >> 0), ((EV & 0x0c) >> 2),
((EV & 0x30) >> 4)+4, ((EV & 0xc0) >> 6)+4);
- return true;
+ } else {
+ error("%Hmask must be an immediate", &EXPR_LOCATION(exp));
+ Result = Ops[0];
}
- return false;
+
+ return true;
case IX86_BUILTIN_PSHUFW:
case IX86_BUILTIN_PSHUFD:
if (ConstantInt *Elt = dyn_cast<ConstantInt>(Ops[1])) {
@@ -290,9 +298,11 @@
Result = BuildVectorShuffle(Ops[0], Ops[0],
((EV & 0x03) >> 0), ((EV & 0x0c) >> 2),
((EV & 0x30) >> 4), ((EV & 0xc0) >> 6));
- return true;
+ } else {
+ error("%Hmask must be an immediate", &EXPR_LOCATION(exp));
+ Result = Ops[0];
}
- return false;
+ return true;
case IX86_BUILTIN_PSHUFHW:
if (ConstantInt *Elt = dyn_cast<ConstantInt>(Ops[1])) {
int EV = Elt->getZExtValue();
@@ -310,9 +320,12 @@
((EV & 0x03) >> 0), ((EV & 0x0c) >> 2),
((EV & 0x30) >> 4), ((EV & 0xc0) >> 6),
4, 5, 6, 7);
- return true;
+ } else {
+ error("%Hmask must be an immediate", &EXPR_LOCATION(exp));
+ Result = Ops[0];
}
- return false;
+
+ return true;
case IX86_BUILTIN_PUNPCKHBW128:
Result = BuildVectorShuffle(Ops[0], Ops[1], 8, 24, 9, 25,
10, 26, 11, 27,
Modified: apple-local/branches/llvm/gcc/config/rs6000/llvm-rs6000.cpp
===================================================================
--- apple-local/branches/llvm/gcc/config/rs6000/llvm-rs6000.cpp 2007-02-23 20:14:43 UTC (rev 124233)
+++ apple-local/branches/llvm/gcc/config/rs6000/llvm-rs6000.cpp 2007-02-24 04:15:35 UTC (rev 124234)
@@ -114,7 +114,8 @@
* invocation into normal LLVM code. If the target can handle the builtin, this
* function should emit the expanded code and return true.
*/
-bool TreeToLLVM::TargetIntrinsicLower(unsigned FnCode,
+bool TreeToLLVM::TargetIntrinsicLower(tree_node *exp,
+ unsigned FnCode,
Value *DestLoc,
Value *&Result,
const Type *ResultType,
Modified: apple-local/branches/llvm/gcc/config/rs6000/rs6000.h
===================================================================
--- apple-local/branches/llvm/gcc/config/rs6000/rs6000.h 2007-02-23 20:14:43 UTC (rev 124233)
+++ apple-local/branches/llvm/gcc/config/rs6000/rs6000.h 2007-02-24 04:15:35 UTC (rev 124234)
@@ -3640,11 +3640,11 @@
* macro should call the target TreeToLLVM::TargetIntrinsicLower method and
* return true.This macro is invoked from a method in the TreeToLLVM class.
*/
-#define LLVM_TARGET_INTRINSIC_LOWER(BUILTIN_CODE, DESTLOC, RESULT, \
+#define LLVM_TARGET_INTRINSIC_LOWER(EXP, BUILTIN_CODE, DESTLOC, RESULT, \
DESTTY, OPS, ARGS, CURBB, \
RESISSIGNED, EXPISSIGNED) \
- return TargetIntrinsicLower(BUILTIN_CODE, DESTLOC, RESULT, \
- DESTTY, OPS, ARGS, CURBB, \
- RESISSIGNED, EXPISSIGNED);
+ TargetIntrinsicLower(EXP, BUILTIN_CODE, DESTLOC, RESULT, \
+ DESTTY, OPS, ARGS, CURBB, \
+ RESISSIGNED, EXPISSIGNED);
/* APPLE LOCAL end LLVM */
Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp
===================================================================
--- apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-02-23 20:14:43 UTC (rev 124233)
+++ apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-02-24 04:15:35 UTC (rev 124234)
@@ -3448,8 +3448,9 @@
bool ResIsSigned = !TYPE_UNSIGNED(TREE_TYPE(TREE_TYPE(fndecl)));
bool ExpIsSigned = !TYPE_UNSIGNED(TREE_TYPE(exp));
unsigned FnCode = DECL_FUNCTION_CODE(fndecl);
- LLVM_TARGET_INTRINSIC_LOWER(FnCode, DestLoc, Result, ResultType, Operands,
- Args, CurBB, ResIsSigned, ExpIsSigned);
+ return LLVM_TARGET_INTRINSIC_LOWER(exp, FnCode, DestLoc, Result, ResultType,
+ Operands, Args, CurBB, ResIsSigned,
+ ExpIsSigned);
#endif
return false;
}
Modified: apple-local/branches/llvm/gcc/llvm-internal.h
===================================================================
--- apple-local/branches/llvm/gcc/llvm-internal.h 2007-02-23 20:14:43 UTC (rev 124233)
+++ apple-local/branches/llvm/gcc/llvm-internal.h 2007-02-24 04:15:35 UTC (rev 124234)
@@ -473,7 +473,8 @@
Value *EmitCONSTRUCTOR(tree_node *exp, Value *DestLoc);
// Optional target defined builtin intrinsic expanding function.
- bool TargetIntrinsicLower(unsigned FnCode,
+ bool TargetIntrinsicLower(tree_node *exp,
+ unsigned FnCode,
Value *DestLoc,
Value *&Result,
const Type *ResultType,
More information about the llvm-commits
mailing list