Skip to content

Commit d5457f8

Browse files
committed
Fix returned attr
1 parent 8fa93a3 commit d5457f8

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

llvm/test/tools/llvm-reduce/reduce-values-to-return-new-return-type.ll

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,36 @@ define range(i32 8, 256) <2 x i32> @preserve_compatible_return_range(ptr %arg, <
153153
store i32 %load, ptr @gv
154154
ret <2 x i32> %arg1
155155
}
156+
157+
; INTERESTING-LABEL: @drop_incompatible_returned_param_attr_0(
158+
159+
; RESULT-LABEL: define i32 @drop_incompatible_returned_param_attr_0(ptr %arg, ptr %arg1) {
160+
; RESULT-NEXT: %load = load i32, ptr %arg
161+
; RESULT-NEXT: ret i32 %load
162+
define ptr @drop_incompatible_returned_param_attr_0(ptr returned %arg, ptr %arg1) {
163+
%load = load i32, ptr %arg
164+
store i32 %load, ptr @gv
165+
ret ptr %arg
166+
}
167+
168+
; INTERESTING-LABEL: @drop_incompatible_returned_param_attr_1(
169+
170+
; RESULT-LABEL: define i32 @drop_incompatible_returned_param_attr_1(ptr %arg, ptr %arg1) {
171+
; RESULT-NEXT: %load = load i32, ptr %arg
172+
; RESULT-NEXT: ret i32 %load
173+
define ptr @drop_incompatible_returned_param_attr_1(ptr %arg, ptr returned %arg1) {
174+
%load = load i32, ptr %arg
175+
store i32 %load, ptr @gv
176+
ret ptr %arg
177+
}
178+
179+
; INTERESTING-LABEL: @drop_incompatible_returned_param_attr_2
180+
181+
; RESULT-LABEL: define ptr @drop_incompatible_returned_param_attr_2(ptr %arg, ptr %arg1) {
182+
; RESULT-NEXT: %load = load ptr, ptr %arg
183+
; RESULT-NEXT: ret ptr %load
184+
define ptr @drop_incompatible_returned_param_attr_2(ptr %arg, ptr returned %arg1) {
185+
%load = load ptr, ptr %arg
186+
store ptr %load, ptr @gv
187+
ret ptr %arg1
188+
}

llvm/tools/llvm-reduce/deltas/ReduceValuesToReturn.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ static void rewriteFuncWithReturnType(Function &OldF, Value *NewRetValue) {
9696
// result of our pruning here.
9797
EliminateUnreachableBlocks(OldF);
9898

99-
10099
// Drop the incompatible attributes before we copy over to the new function.
101100
if (OldRetTy != NewRetTy) {
102101
AttributeList AL = OldF.getAttributes();
@@ -105,6 +104,10 @@ static void rewriteFuncWithReturnType(Function &OldF, Value *NewRetValue) {
105104
OldF.removeRetAttrs(IncompatibleAttrs);
106105
}
107106

107+
// Now we need to remove any returned attributes from parameters.
108+
for (Argument &A : OldF.args())
109+
OldF.removeParamAttr(A.getArgNo(), Attribute::Returned);
110+
108111
Function *NewF =
109112
Function::Create(NewFuncTy, OldF.getLinkage(), OldF.getAddressSpace(), "",
110113
OldF.getParent());

0 commit comments

Comments
 (0)