Author: Andrew Litteken Date: 2021-01-03T23:36:28-06:00 New Revision: 05e6ac4eb811f332ece873381561b0fad0974256
URL: https://github.com/llvm/llvm-project/commit/05e6ac4eb811f332ece873381561b0fad0974256 DIFF: https://github.com/llvm/llvm-project/commit/05e6ac4eb811f332ece873381561b0fad0974256.diff LOG: [IROutliner] Removing a duplicate addition, causing overestimates in IROutliner. There was an extra addition left over from a previous commit for the cost model, this removes it. Added: Modified: llvm/lib/Transforms/IPO/IROutliner.cpp llvm/test/Transforms/IROutliner/opt-remarks.ll llvm/test/Transforms/IROutliner/outlining-calls.ll llvm/test/Transforms/IROutliner/outlining-compatible-and-attribute-transfer.ll llvm/test/Transforms/IROutliner/outlining-compatible-or-attribute-transfer.ll llvm/test/Transforms/IROutliner/outlining-different-constants.ll llvm/test/Transforms/IROutliner/outlining-different-structure.ll llvm/test/Transforms/IROutliner/outlining-isomorphic-predicates.ll Removed: ################################################################################ diff --git a/llvm/lib/Transforms/IPO/IROutliner.cpp b/llvm/lib/Transforms/IPO/IROutliner.cpp index e506d84b2c29..3acde6b6ece0 100644 --- a/llvm/lib/Transforms/IPO/IROutliner.cpp +++ b/llvm/lib/Transforms/IPO/IROutliner.cpp @@ -1286,7 +1286,6 @@ unsigned IROutliner::findBenefitFromAllRegions(OutlinableGroup &CurrentGroup) { RegionBenefit += Region->getBenefit(TTI); LLVM_DEBUG(dbgs() << "Adding: " << RegionBenefit << " saved instructions to overfall benefit.\n"); - CurrentGroup.Benefit += RegionBenefit; } return RegionBenefit; @@ -1405,7 +1404,8 @@ void IROutliner::findCostBenefit(Module &M, OutlinableGroup &CurrentGroup) { LLVM_DEBUG(dbgs() << "Adding: " << OverallArgumentNum << " instructions to cost for each argument in the new" << " function.\n"); - CurrentGroup.Cost += 2 * OverallArgumentNum * TargetTransformInfo::TCC_Basic; + CurrentGroup.Cost += + NumRegions * OverallArgumentNum * TargetTransformInfo::TCC_Basic; LLVM_DEBUG(dbgs() << "Current Cost: " << CurrentGroup.Cost << "\n"); // Each argument needs to either be loaded into a register or onto the stack. @@ -1416,7 +1416,7 @@ void IROutliner::findCostBenefit(Module &M, OutlinableGroup &CurrentGroup) { << " function " << NumRegions << " times for the " << "needed argument handling at the call site.\n"); CurrentGroup.Cost += - 2 * OverallArgumentNum * TargetTransformInfo::TCC_Basic * NumRegions; + OverallArgumentNum * TargetTransformInfo::TCC_Basic * NumRegions; LLVM_DEBUG(dbgs() << "Current Cost: " << CurrentGroup.Cost << "\n"); CurrentGroup.Cost += findCostForOutputBlocks(M, CurrentGroup, TTI); diff --git a/llvm/test/Transforms/IROutliner/opt-remarks.ll b/llvm/test/Transforms/IROutliner/opt-remarks.ll index 0658aba18f6e..2a26e5b08784 100644 --- a/llvm/test/Transforms/IROutliner/opt-remarks.ll +++ b/llvm/test/Transforms/IROutliner/opt-remarks.ll @@ -5,13 +5,16 @@ ; RUN: -pass-remarks-output=%t < %s ; RUN: cat %t | FileCheck -check-prefix=YAML %s -; CHECK: remark: <unknown>:0:0: outlined 2 regions with decrease of 31 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> -; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 5 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK: remark: <unknown>:0:0: outlined 2 regions with decrease of 2 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 6 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 7 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 8 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> ; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 9 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> -; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 13 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> -; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 17 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> -; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 21 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 10 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> ; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 7 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 8 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 13 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> +; CHECK-NEXT: remark: <unknown>:0:0: did not outline 2 regions due to estimated increase of 10 instructions at locations <UNKNOWN LOCATION> <UNKNOWN LOCATION> ; YAML: --- !Passed ; YAML-NEXT: Pass: iroutliner @@ -21,7 +24,7 @@ ; YAML-NEXT: - String: 'outlined ' ; YAML-NEXT: - String: '2' ; YAML-NEXT: - String: ' regions with decrease of ' -; YAML-NEXT: - Benefit: '31' +; YAML-NEXT: - Benefit: '2' ; YAML-NEXT: - String: ' instructions at locations ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: - String: ' ' @@ -35,7 +38,7 @@ ; YAML-NEXT: - String: 'did not outline ' ; YAML-NEXT: - String: '2' ; YAML-NEXT: - String: ' regions due to estimated increase of ' -; YAML-NEXT: - InstructionIncrease: '5' +; YAML-NEXT: - InstructionIncrease: '6' ; YAML-NEXT: - String: ' instructions at locations ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: - String: ' ' @@ -49,7 +52,7 @@ ; YAML-NEXT: - String: 'did not outline ' ; YAML-NEXT: - String: '2' ; YAML-NEXT: - String: ' regions due to estimated increase of ' -; YAML-NEXT: - InstructionIncrease: '9' +; YAML-NEXT: - InstructionIncrease: '7' ; YAML-NEXT: - String: ' instructions at locations ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: - String: ' ' @@ -63,7 +66,7 @@ ; YAML-NEXT: - String: 'did not outline ' ; YAML-NEXT: - String: '2' ; YAML-NEXT: - String: ' regions due to estimated increase of ' -; YAML-NEXT: - InstructionIncrease: '13' +; YAML-NEXT: - InstructionIncrease: '8' ; YAML-NEXT: - String: ' instructions at locations ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: - String: ' ' @@ -77,7 +80,7 @@ ; YAML-NEXT: - String: 'did not outline ' ; YAML-NEXT: - String: '2' ; YAML-NEXT: - String: ' regions due to estimated increase of ' -; YAML-NEXT: - InstructionIncrease: '17' +; YAML-NEXT: - InstructionIncrease: '9' ; YAML-NEXT: - String: ' instructions at locations ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: - String: ' ' @@ -91,7 +94,7 @@ ; YAML-NEXT: - String: 'did not outline ' ; YAML-NEXT: - String: '2' ; YAML-NEXT: - String: ' regions due to estimated increase of ' -; YAML-NEXT: - InstructionIncrease: '21' +; YAML-NEXT: - InstructionIncrease: '10' ; YAML-NEXT: - String: ' instructions at locations ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: - String: ' ' @@ -111,6 +114,48 @@ ; YAML-NEXT: - String: ' ' ; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' ; YAML-NEXT: ... +; YAML-NEXT: --- !Missed +; YAML-NEXT: Pass: iroutliner +; YAML-NEXT: Name: WouldNotDecreaseSize +; YAML-NEXT: Function: function1 +; YAML-NEXT: Args: +; YAML-NEXT: - String: 'did not outline ' +; YAML-NEXT: - String: '2' +; YAML-NEXT: - String: ' regions due to estimated increase of ' +; YAML-NEXT: - InstructionIncrease: '8' +; YAML-NEXT: - String: ' instructions at locations ' +; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' +; YAML-NEXT: - String: ' ' +; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' +; YAML-NEXT: ... +; YAML-NEXT: --- !Missed +; YAML-NEXT: Pass: iroutliner +; YAML-NEXT: Name: WouldNotDecreaseSize +; YAML-NEXT: Function: function1 +; YAML-NEXT: Args: +; YAML-NEXT: - String: 'did not outline ' +; YAML-NEXT: - String: '2' +; YAML-NEXT: - String: ' regions due to estimated increase of ' +; YAML-NEXT: - InstructionIncrease: '13' +; YAML-NEXT: - String: ' instructions at locations ' +; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' +; YAML-NEXT: - String: ' ' +; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' +; YAML-NEXT: ... +; YAML-NEXT: --- !Missed +; YAML-NEXT: Pass: iroutliner +; YAML-NEXT: Name: WouldNotDecreaseSize +; YAML-NEXT: Function: function1 +; YAML-NEXT: Args: +; YAML-NEXT: - String: 'did not outline ' +; YAML-NEXT: - String: '2' +; YAML-NEXT: - String: ' regions due to estimated increase of ' +; YAML-NEXT: - InstructionIncrease: '10' +; YAML-NEXT: - String: ' instructions at locations ' +; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' +; YAML-NEXT: - String: ' ' +; YAML-NEXT: - DebugLoc: '<UNKNOWN LOCATION>' +; YAML-NEXT: ... define void @function1() #0 { entry: @@ -144,6 +189,7 @@ entry: %add = add i32 %0, %1 store i32 %add, i32* %output, align 4 %2 = load i32, i32* %output, align 4 + %3 = load i32, i32* %output, align 4 %mul = mul i32 %2, %add store i32 %mul, i32* %result, align 4 ret void diff --git a/llvm/test/Transforms/IROutliner/outlining-calls.ll b/llvm/test/Transforms/IROutliner/outlining-calls.ll index c19ff28cc25a..2372c4f67496 100644 --- a/llvm/test/Transforms/IROutliner/outlining-calls.ll +++ b/llvm/test/Transforms/IROutliner/outlining-calls.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -verify -iroutliner < %s | FileCheck %s +; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < %s | FileCheck %s ; This test checks that we do can outline calls, but only if they have the same ; function type and the same name. diff --git a/llvm/test/Transforms/IROutliner/outlining-compatible-and-attribute-transfer.ll b/llvm/test/Transforms/IROutliner/outlining-compatible-and-attribute-transfer.ll index 0a051883b069..89983ce003fa 100644 --- a/llvm/test/Transforms/IROutliner/outlining-compatible-and-attribute-transfer.ll +++ b/llvm/test/Transforms/IROutliner/outlining-compatible-and-attribute-transfer.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -verify -iroutliner < %s | FileCheck %s +; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < %s | FileCheck %s ; This has two compatible regions based on function attributes. We have ; attributes that should be transferred only if it is on all of the regions. diff --git a/llvm/test/Transforms/IROutliner/outlining-compatible-or-attribute-transfer.ll b/llvm/test/Transforms/IROutliner/outlining-compatible-or-attribute-transfer.ll index 2c1daa78e797..bc290974839d 100644 --- a/llvm/test/Transforms/IROutliner/outlining-compatible-or-attribute-transfer.ll +++ b/llvm/test/Transforms/IROutliner/outlining-compatible-or-attribute-transfer.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -verify -iroutliner < "%s" | FileCheck "%s" +; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < "%s" | FileCheck "%s" ; This has two compatible regions. We have attributes that should be transferred ; even if it is on only one of the regions. diff --git a/llvm/test/Transforms/IROutliner/outlining- diff erent-constants.ll b/llvm/test/Transforms/IROutliner/outlining- diff erent-constants.ll index 07a1ff75c584..e8534b997b0e 100644 --- a/llvm/test/Transforms/IROutliner/outlining- diff erent-constants.ll +++ b/llvm/test/Transforms/IROutliner/outlining- diff erent-constants.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost< %s | FileCheck %s +; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < %s | FileCheck %s ; This test looks at the constants in the regions, and if it they are the ; diff erents it elevates the constants to arguments. diff --git a/llvm/test/Transforms/IROutliner/outlining- diff erent-structure.ll b/llvm/test/Transforms/IROutliner/outlining- diff erent-structure.ll index d0f18e655d15..e7672756588f 100644 --- a/llvm/test/Transforms/IROutliner/outlining- diff erent-structure.ll +++ b/llvm/test/Transforms/IROutliner/outlining- diff erent-structure.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -verify -iroutliner --ir-outlining-no-cost < %s | FileCheck %s +; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < %s | FileCheck %s ; This is a negative case to show that when we have the same set of ; instructions, but in a diff erent order, they are not outlined in the same way. diff --git a/llvm/test/Transforms/IROutliner/outlining-isomorphic-predicates.ll b/llvm/test/Transforms/IROutliner/outlining-isomorphic-predicates.ll index 16233beff87c..127f2ed82175 100644 --- a/llvm/test/Transforms/IROutliner/outlining-isomorphic-predicates.ll +++ b/llvm/test/Transforms/IROutliner/outlining-isomorphic-predicates.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -verify -iroutliner < %s | FileCheck %s +; RUN: opt -S -verify -iroutliner -ir-outlining-no-cost < %s | FileCheck %s ; This test checks the isomorphic comparisons can be outlined together into one ; function. _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits