| // RUN: %target-sil-opt -enable-sil-verify-all %s -licm | %FileCheck %s |
| |
| import Builtin |
| import Swift |
| |
| sil_global @startTime : $Double |
| sil_global @sum1 : $Int32 |
| |
| // CHECK-LABEl: @sink_cond_fail |
| sil @sink_cond_fail : $@convention(thin) () -> () { |
| // CHECK: bb0 |
| bb0: |
| %0 = global_addr @startTime : $*Double |
| %1 = global_addr @sum1 : $*Int32 |
| %2 = integer_literal $Builtin.Int32, 0 |
| %3 = struct $Int32 (%2 : $Builtin.Int32) |
| store %3 to %1 : $*Int32 |
| %5 = function_ref @callee : $@convention(c) () -> Double |
| %6 = apply %5() : $@convention(c) () -> Double |
| store %6 to %0 : $*Double |
| %8 = integer_literal $Builtin.Int32, 1000000000 |
| // CHECK: integer_literal $Builtin.Int32, 1 |
| // CHECK: integer_literal $Builtin.Int1, -1 |
| // CHECK: struct_element_addr {{.*}} : $*Int32, #Int32._value |
| br bb2(%2 : $Builtin.Int32) |
| |
| // CHECK: bb1: |
| bb1: |
| %11 = tuple () |
| return %11 : $() |
| |
| // CHECK: bb2( |
| bb2(%13 : $Builtin.Int32): |
| %14 = integer_literal $Builtin.Int32, 1 |
| %16 = integer_literal $Builtin.Int1, -1 |
| // CHECK-NEXT: builtin |
| %17 = builtin "sadd_with_overflow_Word"(%13 : $Builtin.Int32, %14 : $Builtin.Int32, %16 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) |
| // CHECK-NEXT: tuple_extract |
| %18 = tuple_extract %17 : $(Builtin.Int32, Builtin.Int1), 0 |
| // CHECK-NEXT: tuple_extract |
| %19 = tuple_extract %17 : $(Builtin.Int32, Builtin.Int1), 1 |
| cond_fail %19 : $Builtin.Int1 |
| %21 = struct_element_addr %1 : $*Int32, #Int32._value |
| // CHECK-NEXT: load |
| %22 = load %21 : $*Builtin.Int32 |
| // CHECK-NEXT: builtin |
| %23 = builtin "sadd_with_overflow_Word"(%22 : $Builtin.Int32, %14 : $Builtin.Int32, %16 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) |
| // CHECK-NEXT: tuple_extract |
| %24 = tuple_extract %23 : $(Builtin.Int32, Builtin.Int1), 0 |
| // CHECK-NEXT: tuple_extract |
| %25 = tuple_extract %23 : $(Builtin.Int32, Builtin.Int1), 1 |
| cond_fail %25 : $Builtin.Int1 |
| // CHECK-NEXT: struct |
| %27 = struct $Int32 (%24 : $Builtin.Int32) |
| // CHECK-NEXT: store |
| store %27 to %1 : $*Int32 |
| // CHECK-NEXT: {{ cond_fail}} |
| // CHECK-NEXT: {{ cond_fail}} |
| %29 = builtin "cmp_eq_Word"(%18 : $Builtin.Int32, %8 : $Builtin.Int32) : $Builtin.Int1 |
| cond_br %29, bb1, bb2(%18 : $Builtin.Int32) |
| } |
| |
| sil @callee : $@convention(c) () -> Double |