Changes in directory llvm/lib/Analysis:
BasicAliasAnalysis.cpp updated: 1.75 -> 1.76 ConstantFolding.cpp updated: 1.1 -> 1.2 --- Log message: Add bswap intrinsics as documented in the Language Reference --- Diffs of the changes: (+17 -1) BasicAliasAnalysis.cpp | 3 ++- ConstantFolding.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) Index: llvm/lib/Analysis/BasicAliasAnalysis.cpp diff -u llvm/lib/Analysis/BasicAliasAnalysis.cpp:1.75 llvm/lib/Analysis/BasicAliasAnalysis.cpp:1.76 --- llvm/lib/Analysis/BasicAliasAnalysis.cpp:1.75 Fri Nov 11 13:02:54 2005 +++ llvm/lib/Analysis/BasicAliasAnalysis.cpp Fri Jan 13 19:25:24 2006 @@ -708,7 +708,8 @@ static const char *DoesntAccessMemoryTable[] = { // LLVM intrinsics: "llvm.frameaddress", "llvm.returnaddress", "llvm.readport", - "llvm.isunordered", "llvm.sqrt", "llvm.ctpop", "llvm.ctlz", "llvm.cttz", + "llvm.isunordered", "llvm.sqrt", "llvm.bswap.i16", "llvm.bswap.i32", + "llvm.bswap.i64", "llvm.ctpop", "llvm.ctlz", "llvm.cttz", "abs", "labs", "llabs", "imaxabs", "fabs", "fabsf", "fabsl", "trunc", "truncf", "truncl", "ldexp", Index: llvm/lib/Analysis/ConstantFolding.cpp diff -u llvm/lib/Analysis/ConstantFolding.cpp:1.1 llvm/lib/Analysis/ConstantFolding.cpp:1.2 --- llvm/lib/Analysis/ConstantFolding.cpp:1.1 Thu Oct 27 11:00:11 2005 +++ llvm/lib/Analysis/ConstantFolding.cpp Fri Jan 13 19:25:24 2006 @@ -37,6 +37,13 @@ switch (F->getIntrinsicID()) { case Intrinsic::isunordered: case Intrinsic::sqrt: + case Intrinsic::bswap_i16: + case Intrinsic::bswap_i32: + case Intrinsic::bswap_i64: + // FIXME: these should be constant folded as well + //case Intrinsic::ctpop: + //case Intrinsic::ctlz: + //case Intrinsic::cttz: return true; default: break; } @@ -142,6 +149,14 @@ default: break; } + } else if (ConstantUInt *Op = dyn_cast<ConstantUInt>(Operands[0])) { + uint64_t V = Op->getValue(); + if (Name == "llvm.bswap.i16") + return ConstantUInt::get(Ty, ByteSwap_16(V)); + else if (Name == "llvm.bswap.i32") + return ConstantUInt::get(Ty, ByteSwap_32(V)); + else if (Name == "llvm.bswap.i64") + return ConstantUInt::get(Ty, ByteSwap_64(V)); } } else if (Operands.size() == 2) { if (ConstantFP *Op1 = dyn_cast<ConstantFP>(Operands[0])) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits