//#Safe type _SIZE_T_TYPE = bv32; const _WATCHED_OFFSET: bv32; const {:group_size_x} group_size_x: bv32; const {:group_size_y} group_size_y: bv32; const {:group_size_z} group_size_z: bv32; const {:num_groups_x} num_groups_x: bv32; const {:num_groups_y} num_groups_y: bv32; const {:num_groups_z} num_groups_z: bv32; procedure {:source_name "foo"} ULTIMATE.start($x: bv32); requires BV32_SGT(group_size_x, 0bv32); requires BV32_SGT(num_groups_x, 0bv32); requires BV32_SGE(group_id_x$1, 0bv32); requires BV32_SGE(group_id_x$2, 0bv32); requires BV32_SLT(group_id_x$1, num_groups_x); requires BV32_SLT(group_id_x$2, num_groups_x); requires BV32_SGE(local_id_x$1, 0bv32); requires BV32_SGE(local_id_x$2, 0bv32); requires BV32_SLT(local_id_x$1, group_size_x); requires BV32_SLT(local_id_x$2, group_size_x); requires BV32_SGT(group_size_y, 0bv32); requires BV32_SGT(num_groups_y, 0bv32); requires BV32_SGE(group_id_y$1, 0bv32); requires BV32_SGE(group_id_y$2, 0bv32); requires BV32_SLT(group_id_y$1, num_groups_y); requires BV32_SLT(group_id_y$2, num_groups_y); requires BV32_SGE(local_id_y$1, 0bv32); requires BV32_SGE(local_id_y$2, 0bv32); requires BV32_SLT(local_id_y$1, group_size_y); requires BV32_SLT(local_id_y$2, group_size_y); requires BV32_SGT(group_size_z, 0bv32); requires BV32_SGT(num_groups_z, 0bv32); requires BV32_SGE(group_id_z$1, 0bv32); requires BV32_SGE(group_id_z$2, 0bv32); requires BV32_SLT(group_id_z$1, num_groups_z); requires BV32_SLT(group_id_z$2, num_groups_z); requires BV32_SGE(local_id_z$1, 0bv32); requires BV32_SGE(local_id_z$2, 0bv32); requires BV32_SLT(local_id_z$1, group_size_z); requires BV32_SLT(local_id_z$2, group_size_z); requires group_id_x$1 == group_id_x$2 && group_id_y$1 == group_id_y$2 && group_id_z$1 == group_id_z$2 ==> local_id_x$1 != local_id_x$2 || local_id_y$1 != local_id_y$2 || local_id_z$1 != local_id_z$2; modifies _TRACKING; implementation {:source_name "foo"} ULTIMATE.start($x: bv32) { var v0: bool; $entry: v0 := $x == 0bv32; goto __partitioned_block_$truebb_0, $falsebb; $falsebb: assume {:partition} !v0; goto $if.end; $if.end: return; __partitioned_block_$truebb_0: assume {:partition} v0; goto __partitioned_block_$truebb_1; __partitioned_block_$truebb_1: call $bugle_barrier_duplicated_0(1bv1, 1bv1); goto $if.end; } axiom (if group_size_y == 1bv32 then 1bv1 else 0bv1) != 0bv1; axiom (if group_size_z == 1bv32 then 1bv1 else 0bv1) != 0bv1; axiom (if num_groups_y == 1bv32 then 1bv1 else 0bv1) != 0bv1; axiom (if num_groups_z == 1bv32 then 1bv1 else 0bv1) != 0bv1; axiom (if group_size_x == 64bv32 then 1bv1 else 0bv1) != 0bv1; axiom (if num_groups_x == 64bv32 then 1bv1 else 0bv1) != 0bv1; const {:local_id_x} local_id_x$1: bv32; const {:local_id_x} local_id_x$2: bv32; const {:local_id_y} local_id_y$1: bv32; const {:local_id_y} local_id_y$2: bv32; const {:local_id_z} local_id_z$1: bv32; const {:local_id_z} local_id_z$2: bv32; const {:group_id_x} group_id_x$1: bv32; const {:group_id_x} group_id_x$2: bv32; const {:group_id_y} group_id_y$1: bv32; const {:group_id_y} group_id_y$2: bv32; const {:group_id_z} group_id_z$1: bv32; const {:group_id_z} group_id_z$2: bv32; procedure {:inline 1} {:safe_barrier} {:source_name "bugle_barrier"} {:barrier} $bugle_barrier_duplicated_0($0: bv1, $1: bv1); requires $0 == 1bv1; requires $1 == 1bv1; modifies _TRACKING; var _TRACKING: bool; implementation {:inline 1} $bugle_barrier_duplicated_0($0: bv1, $1: bv1) { __BarrierImpl: goto anon1_Then, anon1_Else; anon1_Else: assume {:partition} true; goto anon0; anon0: havoc _TRACKING; return; anon1_Then: assume {:partition} false; goto __Disabled; __Disabled: return; } function {:builtin "bvsgt"} BV32_SGT(bv32, bv32) : bool; function {:builtin "bvsge"} BV32_SGE(bv32, bv32) : bool; function {:builtin "bvslt"} BV32_SLT(bv32, bv32) : bool;