Skip to content

Commit 6402bde

Browse files
authored
Merge pull request #61894 from meg-gupta/fixselectvalue
Fix OperandOwnership of select_value
2 parents a2c64b6 + c220116 commit 6402bde

File tree

3 files changed

+24
-18
lines changed

3 files changed

+24
-18
lines changed

lib/SIL/IR/OperandOwnership.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ OPERAND_OWNERSHIP(TrivialUse, PointerToAddress)
180180
OPERAND_OWNERSHIP(TrivialUse, ProjectBlockStorage)
181181
OPERAND_OWNERSHIP(TrivialUse, RawPointerToRef)
182182
OPERAND_OWNERSHIP(TrivialUse, SelectEnumAddr)
183+
// select_value is only supported for integer types currently.
184+
OPERAND_OWNERSHIP(TrivialUse, SelectValue)
183185
OPERAND_OWNERSHIP(TrivialUse, StructElementAddr)
184186
OPERAND_OWNERSHIP(TrivialUse, SwitchEnumAddr)
185187
OPERAND_OWNERSHIP(TrivialUse, SwitchValue)
@@ -422,23 +424,6 @@ OperandOwnershipClassifier::visitSelectEnumInst(SelectEnumInst *i) {
422424
/*allowUnowned*/true);
423425
}
424426

425-
OperandOwnership
426-
OperandOwnershipClassifier::visitSelectValueInst(SelectValueInst *i) {
427-
if (getValue() == i->getDefaultResult())
428-
return OperandOwnership::GuaranteedForwarding;
429-
430-
for (unsigned idx = 0, endIdx = i->getNumCases(); idx < endIdx; ++idx) {
431-
SILValue casevalue;
432-
SILValue result;
433-
std::tie(casevalue, result) = i->getCase(idx);
434-
435-
if (getValue() == casevalue) {
436-
return OperandOwnership::GuaranteedForwarding;
437-
}
438-
}
439-
return OperandOwnership::TrivialUse;
440-
}
441-
442427
OperandOwnership OperandOwnershipClassifier::visitBranchInst(BranchInst *bi) {
443428
ValueOwnershipKind destBlockArgOwnershipKind =
444429
bi->getDestBB()->getArgument(getOperandIndex())->getOwnershipKind();

lib/SIL/IR/ValueOwnership.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ CONSTANT_OWNERSHIP_INST(None, RefElementAddr)
128128
CONSTANT_OWNERSHIP_INST(None, RefTailAddr)
129129
CONSTANT_OWNERSHIP_INST(None, RefToRawPointer)
130130
CONSTANT_OWNERSHIP_INST(None, SelectEnumAddr)
131+
CONSTANT_OWNERSHIP_INST(None, SelectValue)
131132
CONSTANT_OWNERSHIP_INST(None, StringLiteral)
132133
CONSTANT_OWNERSHIP_INST(None, StructElementAddr)
133134
CONSTANT_OWNERSHIP_INST(None, SuperMethod)
@@ -166,7 +167,6 @@ CONSTANT_OWNERSHIP_INST(None, ExtractExecutor)
166167
}
167168
CONSTANT_OR_NONE_OWNERSHIP_INST(Guaranteed, StructExtract)
168169
CONSTANT_OR_NONE_OWNERSHIP_INST(Guaranteed, TupleExtract)
169-
CONSTANT_OR_NONE_OWNERSHIP_INST(Guaranteed, SelectValue)
170170
CONSTANT_OR_NONE_OWNERSHIP_INST(Guaranteed, DifferentiableFunctionExtract)
171171
CONSTANT_OR_NONE_OWNERSHIP_INST(Guaranteed, LinearFunctionExtract)
172172
// OpenExistentialValue opens the boxed value inside an existential

test/SIL/OwnershipVerifier/use_verifier.sil

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,3 +1432,24 @@ bb0(%0 : @unowned $ThreeDifferingPayloadEnum):
14321432
%1 = unchecked_enum_data %0 : $ThreeDifferingPayloadEnum, #ThreeDifferingPayloadEnum.trivial_payload!enumelt
14331433
return %1 : $Builtin.Int32
14341434
}
1435+
1436+
sil [ossa] @test_select_value : $@convention(thin) (Builtin.Word) -> Builtin.Word {
1437+
bb0(%0 : $Builtin.Word):
1438+
1439+
%1 = integer_literal $Builtin.Word, 1
1440+
%2 = integer_literal $Builtin.Word, 2
1441+
%3 = integer_literal $Builtin.Word, 3
1442+
%4 = integer_literal $Builtin.Word, 4
1443+
%5 = integer_literal $Builtin.Word, 5
1444+
%6 = integer_literal $Builtin.Word, 6
1445+
%11 = integer_literal $Builtin.Word, 11
1446+
%22 = integer_literal $Builtin.Word, 22
1447+
%33 = integer_literal $Builtin.Word, 33
1448+
%44 = integer_literal $Builtin.Word, 44
1449+
%55 = integer_literal $Builtin.Word, 55
1450+
%66 = integer_literal $Builtin.Word, 66
1451+
1452+
%10 = select_value %1: $Builtin.Word, case %1: %11, case %2: %22, case %4: %44, case %5: %55, case %6: %66, default %33 : $Builtin.Word
1453+
1454+
return %10 : $Builtin.Word
1455+
}

0 commit comments

Comments
 (0)