svn commit: r288195 - projects/clang370-import/contrib/llvm/include/llvm/Analysis
Dimitry Andric
dim at FreeBSD.org
Thu Sep 24 21:20:01 UTC 2015
Author: dim
Date: Thu Sep 24 21:20:00 2015
New Revision: 288195
URL: https://svnweb.freebsd.org/changeset/base/288195
Log:
Pull in r248439 from upstream llvm trunk (by Sanjay Patel):
set div/rem default values to 'expensive' in TargetTransformInfo's
cost model
...because that's what the cost model was intended to do.
As discussed in D12882, this fix has a temporary unintended
consequence for SimplifyCFG: it causes us to not speculate an fdiv.
However, two wrongs make PR24818 right, and two wrongs make PR24343
act right even though it's really still wrong.
I intend to correct SimplifyCFG and add to CodeGenPrepare to account
for this cost model change and preserve the righteousness for the bug
report cases.
https://llvm.org/bugs/show_bug.cgi?id=24818
https://llvm.org/bugs/show_bug.cgi?id=24343
Differential Revision: http://reviews.llvm.org/D12882
This fixes the too-eager fdiv hoisting in pow(), which could lead to
unexpected floating point exceptions.
Modified:
projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
Modified: projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
==============================================================================
--- projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h Thu Sep 24 21:04:48 2015 (r288194)
+++ projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h Thu Sep 24 21:20:00 2015 (r288195)
@@ -60,6 +60,14 @@ public:
// Otherwise, the default basic cost is used.
return TTI::TCC_Basic;
+ case Instruction::FDiv:
+ case Instruction::FRem:
+ case Instruction::SDiv:
+ case Instruction::SRem:
+ case Instruction::UDiv:
+ case Instruction::URem:
+ return TTI::TCC_Expensive;
+
case Instruction::IntToPtr: {
// An inttoptr cast is free so long as the input is a legal integer type
// which doesn't contain values outside the range of a pointer.
More information about the svn-src-projects
mailing list