diff options
| author | Fangrui Song <i@maskray.me> | 2024-10-11 21:39:06 -0700 |
|---|---|---|
| committer | Amir Ayupov <aaupov@fb.com> | 2024-10-11 21:39:06 -0700 |
| commit | 436701d88c1384d3f72c44dd152cd55e47ef2de3 (patch) | |
| tree | c9825a370f1ba14e5fff19cea1279a0e7a7e9b54 /llvm/lib/Transforms/IPO/FunctionSpecialization.cpp | |
| parent | efa1900174cb940f3750ce9e8cb6f06e69b4f3f0 (diff) | |
| parent | dd326b122506421aba2368053103767f4c56e2ba (diff) | |
[𝘀𝗽𝗿] changes introduced through rebaseusers/aaupov/spr/main.boltnfc-speedup-batwritemaps
Created using spr 1.3.4
[skip ci]
Diffstat (limited to 'llvm/lib/Transforms/IPO/FunctionSpecialization.cpp')
| -rw-r--r-- | llvm/lib/Transforms/IPO/FunctionSpecialization.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp index 548335d750e3..bd0a337e579e 100644 --- a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp +++ b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp @@ -423,13 +423,16 @@ Constant *InstCostVisitor::visitGetElementPtrInst(GetElementPtrInst &I) { Constant *InstCostVisitor::visitSelectInst(SelectInst &I) { assert(LastVisited != KnownConstants.end() && "Invalid iterator!"); - if (I.getCondition() != LastVisited->first) - return nullptr; - - Value *V = LastVisited->second->isZeroValue() ? I.getFalseValue() - : I.getTrueValue(); - Constant *C = findConstantFor(V, KnownConstants); - return C; + if (I.getCondition() == LastVisited->first) { + Value *V = LastVisited->second->isZeroValue() ? I.getFalseValue() + : I.getTrueValue(); + return findConstantFor(V, KnownConstants); + } + if (Constant *Condition = findConstantFor(I.getCondition(), KnownConstants)) + if ((I.getTrueValue() == LastVisited->first && Condition->isOneValue()) || + (I.getFalseValue() == LastVisited->first && Condition->isZeroValue())) + return LastVisited->second; + return nullptr; } Constant *InstCostVisitor::visitCastInst(CastInst &I) { |
