swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.49k stars 10.35k forks source link

[SR-8325] SILVerifier fails for the host function #50853

Closed swift-ci closed 6 years ago

swift-ci commented 6 years ago
Previous ID SR-8325
Radar None
Original Reporter bgogul (JIRA User)
Type Bug
Status Resolved
Resolution Done
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | Swift for TensorFlow | |Labels | Bug | |Assignee | @marcrasi | |Priority | Medium | md5: 9f3f1ebd24277953f154019172c89719

Issue Description:

import TensorFlow

public func natSumWithBreak(_ breakIndex: Int32) -> Tensor<Int32> {
  var i: Int32 = 1
  var sum = Tensor<Int32>(0);
  let maxCount: Int32 = 100
  while i <= maxCount {
    sum += i
    if (i == breakIndex) {
      break;
    }
   i += 1
  }
  return sum;
}
print(natSumWithBreak(2))

commandline:

$swift -Xllvm -tf-ensure-single-loop-exit -O test.swift

error:

SIL verification failed: instruction isn't dominated by its operand: properlyDominates(valueI, I)
Verifying instruction:
%2 = struct_extract %0 : $Int32, #Int32._value // users: %30, %3, %91
%50 = integer_literal $Builtin.Int32, 1 // users: %63, %3, %70
-> %3 = builtin "cmp_eq_Int32"(%2 : $Builtin.Int32, %50 : $Builtin.Int32) : $Builtin.Int1 // users: %18, %60
store %3 to %17 : $*Builtin.Int1 // id: %18
cond_br %3, bb1, bb2 // id: %60
In function:
// natSumWithBreak(_:)
sil @$S4test15natSumWithBreaky10TensorFlow0F0Vys5Int32VGAGF : $@convention(thin) (Int32) -> @owned Tensor<Int32> {
// %0 // users: %2, %1
bb0(%0 : $Int32):
debug_value %0 : $Int32, let, name "breakIndex", argno 1 // id: %1
%2 = struct_extract %0 : $Int32, #Int32._value // users: %30, %3, %91
%3 = builtin "cmp_eq_Int32"(%2 : $Builtin.Int32, %50 : $Builtin.Int32) : $Builtin.In
...
...
#&#8203;0 0x0000000004d57c54 PrintStackTraceSignalHandler(void*) (/usr/local/google/home/bgogul/workspace/brain/s4tf/build/Ninja-ReleaseAssert+swift-DebugAssert/swift-linux-x86_64/bin/swift+0x4d57c54)
#&#8203;1 0x0000000004d55ed2 llvm::sys::RunSignalHandlers() (/usr/local/google/home/bgogul/workspace/brain/s4tf/build/Ninja-ReleaseAssert+swift-DebugAssert/swift-linux-x86_64/bin/swift+0x4d55ed2)
#&#8203;2 0x0000000004d57e02 SignalHandler(int) (/usr/local/google/home/bgogul/workspace/brain/s4tf/build/Ninja-ReleaseAssert+swift-DebugAssert/swift-linux-x86_64/bin/swift+0x4d57e02)
#&#8203;3 0x00007fe2e02ca0c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x110c0)
#&#8203;4 0x00007fe2da246fcf gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x32fcf)
#&#8203;5 0x00007fe2da2483fa abort (/lib/x86_64-linux-gnu/libc.so.6+0x343fa)
#&#8203;6 0x0000000001b81d5a (anonymous namespace)::SILVerifier::_require(bool, llvm::Twine const&, std::function<void ()> const&) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:0:7
#&#8203;7 0x0000000001b8d783 (anonymous namespace)::SILVerifier::checkSILInstruction(swift::SILInstruction*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:751:11
#&#8203;8 0x0000000001b8cbc2 (anonymous namespace)::SILVerifier::visitSILInstruction(swift::SILInstruction*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:670:34
#&#8203;9 0x0000000001b8cb68 swift::SILInstructionVisitor<(anonymous namespace)::SILVerifier, void>::visitSingleValueInstruction(swift::SingleValueInstruction*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/include/swift/SIL/SILNodes.def:229:1
#&#8203;10 0x0000000001b8b0b7 (anonymous namespace)::SILVerifierBase<(anonymous namespace)::SILVerifier>::visitBuiltinInst(swift::BuiltinInst*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/include/swift/SIL/SILNodes.def:418:3
#&#8203;11 0x0000000001b88195 swift::SILInstructionVisitor<(anonymous namespace)::SILVerifier, void>::visit(swift::SILInstruction*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/include/swift/SIL/SILNodes.def:418:3
#&#8203;12 0x0000000001b86fca swift::SILVisitorBase<(anonymous namespace)::SILVerifier, void>::visitSILBasicBlock(swift::SILBasicBlock*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/include/swift/SIL/SILVisitor.h:0:16
#&#8203;13 0x0000000001b86f21 (anonymous namespace)::SILVerifier::visitSILBasicBlock(swift::SILBasicBlock*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:4809:27
#&#8203;14 0x0000000001b83e73 (anonymous namespace)::SILVerifier::visitSILBasicBlocks(swift::SILFunction*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:0:7
#&#8203;15 0x0000000001b82058 (anonymous namespace)::SILVerifier::visitSILFunction(swift::SILFunction*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:4884:28
#&#8203;16 0x0000000001b7dbf9 (anonymous namespace)::SILVerifier::verify() /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:4889:3
#&#8203;17 0x0000000001b7d75e swift::SILFunction::verify(bool) const /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:4910:38
#&#8203;18 0x0000000001b81003 swift::SILModule::verify() const /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/SIL/SILVerifier.cpp:0:7
#&#8203;19 0x000000000054ced9 performCompileStepsPostSILGen(swift::CompilerInstance&, swift::CompilerInvocation&, std::unique_ptr<swift::SILModule, std::default_delete<swift::SILModule> >, bool, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, bool, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/FrontendTool/FrontendTool.cpp:1317:9
#&#8203;20 0x00000000005487d5 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/FrontendTool/FrontendTool.cpp:1003:9
#&#8203;21 0x000000000054766e swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/lib/FrontendTool/FrontendTool.cpp:1838:8
#&#8203;22 0x000000000049cdaf run_driver(llvm::StringRef, llvm::ArrayRef<char const*>) /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/tools/driver/driver.cpp:122:7
#&#8203;23 0x000000000049c038 main /usr/local/google/home/bgogul/workspace/brain/s4tf/swift/tools/driver/driver.cpp:251:5
#&#8203;24 0x00007fe2da2342b1 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202b1)
#&#8203;25 0x00000000004946da _start (/usr/local/google/home/bgogul/workspace/brain/s4tf/build/Ninja-ReleaseAssert+swift-DebugAssert/swift-linux-x86_64/bin/swift+0x4946da)
Stack dump:
0.  Program arguments: /usr/local/google/home/bgogul/workspace/brain/s4tf/build/Ninja-ReleaseAssert+swift-DebugAssert/swift-linux-x86_64/bin/swift -frontend -interpret /usr/local/google/home/bgogul/workspace/temp/swift/test.swift -disable-objc-interop -O -Xllvm -tf-ensure-single-loop-exit -module-name test 
1.  While verifying SIL function "@$S4test15natSumWithBreaky10TensorFlow0F0Vys5Int32VGAGF".
for 'natSumWithBreak(_:)' at /usr/local/google/home/bgogul/workspace/temp/swift/test.swift:23:8
Aborted
83b09dda-53f5-4663-b44c-87fd2a9a8717 commented 6 years ago

Fixed in https://github.com/apple/swift/pull/19268