SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %data:ptr<private, array<i32, 10>, read_write> = var
  %temp:ptr<private, array<i32, 10>, read_write> = var
  %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
  $B2: {
    %k:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %15:i32 = load %f
    %x_255:i32 = let %15
    store %k, %x_255
    %17:i32 = load %f
    %x_256:i32 = let %17
    store %i, %x_256
    %19:i32 = load %mid
    %x_257:i32 = let %19
    %21:i32 = add %x_257, 1i
    store %j, %21
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_285:ptr<function, i32, read_write> = var
        %x_286:ptr<function, i32, read_write> = var
        %x_305:ptr<function, i32, read_write> = var
        %x_306:ptr<function, i32, read_write> = var
        %x_320:ptr<function, i32, read_write> = var
        %x_324:ptr<function, i32, read_write> = var
        %x_339:ptr<function, i32, read_write> = var
        %x_338:ptr<function, i32, read_write> = var
        %x_352:ptr<function, i32, read_write> = var
        %x_351:ptr<function, i32, read_write> = var
        %x_366:ptr<function, i32, read_write> = var
        %x_365:ptr<function, i32, read_write> = var
        %x_287_phi:ptr<function, i32, read_write> = var
        %x_307_phi:ptr<function, i32, read_write> = var
        %x_328_phi:ptr<function, i32, read_write> = var
        %x_340_phi:ptr<function, i32, read_write> = var
        %x_353_phi:ptr<function, i32, read_write> = var
        %x_367_phi:ptr<function, i32, read_write> = var
        %40:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
        %41:f32 = load_vector_element %40, 0u
        %x_261:f32 = let %41
        %43:bool = gte 1.0f, %x_261
        if %43 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            continue  # -> $B4
          }
        }
        %44:i32 = load %i
        %x_266:i32 = let %44
        %46:i32 = load %mid
        %x_267:i32 = let %46
        %48:i32 = load %j
        %x_269:i32 = let %48
        %50:i32 = load %to
        %x_270:i32 = let %50
        %52:bool = lte %x_266, %x_267
        %53:bool = lte %x_269, %x_270
        %54:bool = and %52, %53
        if %54 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            exit_if  # if_2
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        %55:i32 = load %i
        %x_274:i32 = let %55
        %57:ptr<private, i32, read_write> = access %data, %x_274
        %58:i32 = load %57
        %x_276:i32 = let %58
        %60:i32 = load %j
        %x_277:i32 = let %60
        %62:ptr<private, i32, read_write> = access %data, %x_277
        %63:i32 = load %62
        %x_279:i32 = let %63
        %65:bool = lt %x_276, %x_279
        %x_280:bool = let %65
        if %x_280 [t: $B9, f: $B10] {  # if_3
          $B9: {  # true
            %67:i32 = load %k
            store %x_285, %67
            %68:i32 = load %x_285
            store %x_287_phi, %68
            exit_if  # if_3
          }
          $B10: {  # false
            store %x_286, 0i
            %69:i32 = load %x_286
            store %x_287_phi, %69
            exit_if  # if_3
          }
        }
        %70:i32 = load %x_287_phi
        %x_287:i32 = let %70
        %72:i32 = add %x_287, 1i
        %x_288:i32 = let %72
        if %x_280 [t: $B11] {  # if_4
          $B11: {  # true
            store %k, %x_288
            %74:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
            %75:f32 = load_vector_element %74, 0u
            %x_293:f32 = let %75
            %77:bool = lte 1.0f, %x_293
            %78:bool = eq %77, false
            if %78 [t: $B12, f: $B13] {  # if_5
              $B12: {  # true
                exit_if  # if_5
              }
              $B13: {  # false
                continue  # -> $B4
              }
            }
            exit_if  # if_4
          }
        }
        %79:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
        %80:f32 = load_vector_element %79, 1u
        %x_297:f32 = let %80
        %82:bool = gte %x_297, 0.0f
        if %82 [t: $B14, f: $B15] {  # if_6
          $B14: {  # true
            exit_if  # if_6
          }
          $B15: {  # false
            continue  # -> $B4
          }
        }
        %x_300:i32 = let 0i
        if %x_280 [t: $B16, f: $B17] {  # if_7
          $B16: {  # true
            %84:i32 = load %i
            store %x_305, %84
            %85:i32 = load %x_305
            store %x_307_phi, %85
            exit_if  # if_7
          }
          $B17: {  # false
            store %x_306, 0i
            %86:i32 = load %x_306
            store %x_307_phi, %86
            exit_if  # if_7
          }
        }
        %87:i32 = load %x_307_phi
        %x_307:i32 = let %87
        %89:i32 = select %x_300, %x_307, %x_280
        %x_309:i32 = let %89
        if %x_280 [t: $B18] {  # if_8
          $B18: {  # true
            %91:i32 = add %x_309, 1i
            store %i, %91
            exit_if  # if_8
          }
        }
        %x_315:i32 = let 0i
        if %x_280 [t: $B19, f: $B20] {  # if_9
          $B19: {  # true
            %93:ptr<private, i32, read_write> = access %data, %x_309
            %94:i32 = load %93
            store %x_320, %94
            %95:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
            %96:f32 = load_vector_element %95, 1u
            %x_322:f32 = let %96
            %98:i32 = load %x_320
            store %x_328_phi, %98
            %99:bool = lte 0.0f, %x_322
            %100:bool = eq %99, false
            if %100 [t: $B21] {  # if_10
              $B21: {  # true
                continue  # -> $B4
              }
            }
            exit_if  # if_9
          }
          $B20: {  # false
            store %x_324, 0i
            %101:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
            %102:f32 = load_vector_element %101, 1u
            %x_326:f32 = let %102
            %104:i32 = load %x_324
            store %x_328_phi, %104
            %105:bool = lt %x_326, 0.0f
            %106:bool = eq %105, false
            if %106 [t: $B22, f: $B23] {  # if_11
              $B22: {  # true
                exit_if  # if_11
              }
              $B23: {  # false
                continue  # -> $B4
              }
            }
            exit_if  # if_9
          }
        }
        %107:i32 = load %x_328_phi
        %x_328:i32 = let %107
        if %x_280 [t: $B24] {  # if_12
          $B24: {  # true
            %109:ptr<private, i32, read_write> = access %temp, %x_287
            %110:i32 = select %x_315, %x_328, %x_280
            store %109, %110
            exit_if  # if_12
          }
        }
        if %x_280 [t: $B25, f: $B26] {  # if_13
          $B25: {  # true
            store %x_339, 0i
            %111:i32 = load %x_339
            store %x_340_phi, %111
            exit_if  # if_13
          }
          $B26: {  # false
            %112:i32 = load %k
            store %x_338, %112
            %113:i32 = load %x_338
            store %x_340_phi, %113
            exit_if  # if_13
          }
        }
        %114:i32 = load %x_340_phi
        %x_340:i32 = let %114
        if %x_280 [t: $B27, f: $B28] {  # if_14
          $B27: {  # true
            exit_if  # if_14
          }
          $B28: {  # false
            %116:i32 = add %x_340, 1i
            store %k, %116
            exit_if  # if_14
          }
        }
        %117:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
        %118:f32 = load_vector_element %117, 0u
        %x_345:f32 = let %118
        %120:bool = lte 1.0f, %x_345
        %121:bool = eq %120, false
        if %121 [t: $B29, f: $B30] {  # if_15
          $B29: {  # true
            exit_if  # if_15
          }
          $B30: {  # false
            continue  # -> $B4
          }
        }
        if %x_280 [t: $B31, f: $B32] {  # if_16
          $B31: {  # true
            store %x_352, 0i
            %122:i32 = load %x_352
            store %x_353_phi, %122
            exit_if  # if_16
          }
          $B32: {  # false
            %123:i32 = load %j
            store %x_351, %123
            %124:i32 = load %x_351
            store %x_353_phi, %124
            exit_if  # if_16
          }
        }
        %125:i32 = load %x_353_phi
        %x_353:i32 = let %125
        %x_355:i32 = let 0i
        %128:i32 = select %x_353, %x_355, %x_280
        %x_357:i32 = let %128
        if %x_280 [t: $B33, f: $B34] {  # if_17
          $B33: {  # true
            exit_if  # if_17
          }
          $B34: {  # false
            %130:i32 = add %x_357, 1i
            store %j, %130
            exit_if  # if_17
          }
        }
        if %x_280 [t: $B35, f: $B36] {  # if_18
          $B35: {  # true
            store %x_366, 0i
            %131:i32 = load %x_366
            store %x_367_phi, %131
            exit_if  # if_18
          }
          $B36: {  # false
            %132:ptr<private, i32, read_write> = access %data, %x_357
            %133:i32 = load %132
            store %x_365, %133
            %134:i32 = load %x_365
            store %x_367_phi, %134
            exit_if  # if_18
          }
        }
        %135:i32 = load %x_367_phi
        %x_367:i32 = let %135
        if %x_280 [t: $B37, f: $B38] {  # if_19
          $B37: {  # true
            exit_if  # if_19
          }
          $B38: {  # false
            %137:ptr<private, i32, read_write> = access %temp, %x_340
            store %137, %x_367
            exit_if  # if_19
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    loop [b: $B39, c: $B40] {  # loop_2
      $B39: {  # body
        %138:i32 = load %i
        %x_376:i32 = let %138
        %140:i32 = load %i
        %x_378:i32 = let %140
        %142:i32 = load %mid
        %x_379:i32 = let %142
        %144:bool = lt %x_376, 10i
        %145:bool = lte %x_378, %x_379
        %146:bool = and %144, %145
        if %146 [t: $B41, f: $B42] {  # if_20
          $B41: {  # true
            exit_if  # if_20
          }
          $B42: {  # false
            exit_loop  # loop_2
          }
        }
        %147:i32 = load %k
        %x_383:i32 = let %147
        %149:i32 = add %x_383, 1i
        store %k, %149
        %150:i32 = load %i
        %x_385:i32 = let %150
        %152:i32 = add %x_385, 1i
        store %i, %152
        %153:ptr<private, i32, read_write> = access %data, %x_385
        %154:i32 = load %153
        %x_388:i32 = let %154
        %156:ptr<private, i32, read_write> = access %temp, %x_383
        store %156, %x_388
        continue  # -> $B40
      }
      $B40: {  # continuing
        next_iteration  # -> $B39
      }
    }
    %157:i32 = load %f
    %x_390:i32 = let %157
    store %i_1, %x_390
    loop [b: $B43, c: $B44] {  # loop_3
      $B43: {  # body
        %159:i32 = load %i_1
        %x_395:i32 = let %159
        %161:i32 = load %to
        %x_396:i32 = let %161
        %163:bool = lte %x_395, %x_396
        if %163 [t: $B45, f: $B46] {  # if_21
          $B45: {  # true
            exit_if  # if_21
          }
          $B46: {  # false
            exit_loop  # loop_3
          }
        }
        %164:i32 = load %i_1
        %x_399:i32 = let %164
        %166:i32 = load %i_1
        %x_400:i32 = let %166
        %168:ptr<private, i32, read_write> = access %temp, %x_400
        %169:i32 = load %168
        %x_402:i32 = let %169
        %171:ptr<private, i32, read_write> = access %data, %x_399
        store %171, %x_402
        continue  # -> $B44
      }
      $B44: {  # continuing
        %172:i32 = load %i_1
        %x_404:i32 = let %172
        %174:i32 = add %x_404, 1i
        store %i_1, %174
        next_iteration  # -> $B43
      }
    }
    ret
  }
}
%mergeSort_ = func():void {
  $B47: {
    %low:ptr<function, i32, read_write> = var
    %high:ptr<function, i32, read_write> = var
    %m:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    %f_1:ptr<function, i32, read_write> = var
    %mid_1:ptr<function, i32, read_write> = var
    %to_1:ptr<function, i32, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, i32, read_write> = var
    store %low, 0i
    store %high, 9i
    store %m, 1i
    loop [b: $B48, c: $B49] {  # loop_4
      $B48: {  # body
        %186:i32 = load %m
        %x_411:i32 = let %186
        %188:i32 = load %high
        %x_412:i32 = let %188
        %190:bool = lte %x_411, %x_412
        if %190 [t: $B50, f: $B51] {  # if_22
          $B50: {  # true
            exit_if  # if_22
          }
          $B51: {  # false
            exit_loop  # loop_4
          }
        }
        %191:i32 = load %low
        %x_415:i32 = let %191
        store %i_2, %x_415
        loop [b: $B52, c: $B53] {  # loop_5
          $B52: {  # body
            %193:i32 = load %i_2
            %x_420:i32 = let %193
            %195:i32 = load %high
            %x_421:i32 = let %195
            %197:bool = lt %x_420, %x_421
            if %197 [t: $B54, f: $B55] {  # if_23
              $B54: {  # true
                exit_if  # if_23
              }
              $B55: {  # false
                exit_loop  # loop_5
              }
            }
            %198:i32 = load %i_2
            %x_424:i32 = let %198
            store %f_1, %x_424
            %200:i32 = load %i_2
            %x_425:i32 = let %200
            %202:i32 = load %m
            %x_426:i32 = let %202
            %204:i32 = add %x_425, %x_426
            %205:i32 = sub %204, 1i
            store %mid_1, %205
            %206:i32 = load %i_2
            %x_429:i32 = let %206
            %208:i32 = load %m
            %x_430:i32 = let %208
            %210:i32 = load %high
            %x_434:i32 = let %210
            %212:i32 = mul 2i, %x_430
            %213:i32 = add %x_429, %212
            %214:i32 = sub %213, 1i
            %215:i32 = min %214, %x_434
            store %to_1, %215
            %216:i32 = load %f_1
            %x_436:i32 = let %216
            store %param, %x_436
            %218:i32 = load %mid_1
            %x_437:i32 = let %218
            store %param_1, %x_437
            %220:i32 = load %to_1
            %x_438:i32 = let %220
            store %param_2, %x_438
            %222:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
            continue  # -> $B53
          }
          $B53: {  # continuing
            %223:i32 = load %m
            %x_440:i32 = let %223
            %225:i32 = load %i_2
            %x_442:i32 = let %225
            %227:i32 = mul 2i, %x_440
            %228:i32 = add %x_442, %227
            store %i_2, %228
            next_iteration  # -> $B52
          }
        }
        continue  # -> $B49
      }
      $B49: {  # continuing
        %229:i32 = load %m
        %x_444:i32 = let %229
        %231:i32 = mul 2i, %x_444
        store %m, %231
        next_iteration  # -> $B48
      }
    }
    ret
  }
}
%main_1 = func():void {
  $B56: {
    %i_3:ptr<function, i32, read_write> = var
    %j_1:ptr<function, i32, read_write> = var
    %grey:ptr<function, f32, read_write> = var
    %236:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
    %237:f32 = load_vector_element %236, 0u
    %x_88:f32 = let %237
    %239:i32 = call %tint_f32_to_i32, %x_88
    store %i_3, %239
    loop [b: $B57, c: $B58] {  # loop_6
      $B57: {  # body
        %241:i32 = load %i_3
        %x_94:i32 = let %241
        switch %x_94 [c: (9i, $B59), c: (8i, $B60), c: (7i, $B61), c: (6i, $B62), c: (5i, $B63), c: (4i, $B64), c: (3i, $B65), c: (2i, $B66), c: (1i, $B67), c: (0i, $B68), c: (default, $B69)] {  # switch_1
          $B59: {  # case
            %243:i32 = load %i_3
            %x_124:i32 = let %243
            %245:ptr<private, i32, read_write> = access %data, %x_124
            store %245, -5i
            exit_switch  # switch_1
          }
          $B60: {  # case
            %246:i32 = load %i_3
            %x_122:i32 = let %246
            %248:ptr<private, i32, read_write> = access %data, %x_122
            store %248, -4i
            exit_switch  # switch_1
          }
          $B61: {  # case
            %249:i32 = load %i_3
            %x_120:i32 = let %249
            %251:ptr<private, i32, read_write> = access %data, %x_120
            store %251, -3i
            exit_switch  # switch_1
          }
          $B62: {  # case
            %252:i32 = load %i_3
            %x_118:i32 = let %252
            %254:ptr<private, i32, read_write> = access %data, %x_118
            store %254, -2i
            exit_switch  # switch_1
          }
          $B63: {  # case
            %255:i32 = load %i_3
            %x_116:i32 = let %255
            %257:ptr<private, i32, read_write> = access %data, %x_116
            store %257, -1i
            exit_switch  # switch_1
          }
          $B64: {  # case
            %258:i32 = load %i_3
            %x_114:i32 = let %258
            %260:ptr<private, i32, read_write> = access %data, %x_114
            store %260, 0i
            exit_switch  # switch_1
          }
          $B65: {  # case
            %261:i32 = load %i_3
            %x_112:i32 = let %261
            %263:ptr<private, i32, read_write> = access %data, %x_112
            store %263, 1i
            exit_switch  # switch_1
          }
          $B66: {  # case
            %264:i32 = load %i_3
            %x_110:i32 = let %264
            %266:ptr<private, i32, read_write> = access %data, %x_110
            store %266, 2i
            exit_switch  # switch_1
          }
          $B67: {  # case
            %267:i32 = load %i_3
            %x_108:i32 = let %267
            %269:ptr<private, i32, read_write> = access %data, %x_108
            store %269, 3i
            exit_switch  # switch_1
          }
          $B68: {  # case
            %270:i32 = load %i_3
            %x_106:i32 = let %270
            %272:ptr<private, i32, read_write> = access %data, %x_106
            store %272, 4i
            exit_switch  # switch_1
          }
          $B69: {  # case
            exit_switch  # switch_1
          }
        }
        %273:i32 = load %i_3
        %x_126:i32 = let %273
        %275:i32 = add %x_126, 1i
        store %i_3, %275
        continue  # -> $B58
      }
      $B58: {  # continuing
        %276:i32 = load %i_3
        %x_128:i32 = let %276
        %278:bool = lt %x_128, 10i
        %279:bool = eq %278, false
        break_if %279  # -> [t: exit_loop loop_6, f: $B57]
      }
    }
    store %j_1, 0i
    loop [b: $B70, c: $B71] {  # loop_7
      $B70: {  # body
        %280:i32 = load %j_1
        %x_134:i32 = let %280
        %282:bool = lt %x_134, 10i
        if %282 [t: $B72, f: $B73] {  # if_24
          $B72: {  # true
            exit_if  # if_24
          }
          $B73: {  # false
            exit_loop  # loop_7
          }
        }
        %283:i32 = load %j_1
        %x_137:i32 = let %283
        %285:i32 = load %j_1
        %x_138:i32 = let %285
        %287:ptr<private, i32, read_write> = access %data, %x_138
        %288:i32 = load %287
        %x_140:i32 = let %288
        %290:ptr<private, i32, read_write> = access %temp, %x_137
        store %290, %x_140
        continue  # -> $B71
      }
      $B71: {  # continuing
        %291:i32 = load %j_1
        %x_142:i32 = let %291
        %293:i32 = add %x_142, 1i
        store %j_1, %293
        next_iteration  # -> $B70
      }
    }
    %294:void = call %mergeSort_
    %295:f32 = load_vector_element %gl_FragCoord, 1u
    %x_146:f32 = let %295
    %297:i32 = call %tint_f32_to_i32, %x_146
    %298:bool = lt %297, 30i
    if %298 [t: $B74, f: $B75] {  # if_25
      $B74: {  # true
        %299:ptr<private, i32, read_write> = access %data, 0i
        %300:i32 = load %299
        %x_153:i32 = let %300
        %302:f32 = convert %x_153
        %303:f32 = div %302, 10.0f
        %304:f32 = add 0.5f, %303
        store %grey, %304
        exit_if  # if_25
      }
      $B75: {  # false
        %305:f32 = load_vector_element %gl_FragCoord, 1u
        %x_158:f32 = let %305
        %307:i32 = call %tint_f32_to_i32, %x_158
        %308:bool = lt %307, 60i
        if %308 [t: $B76, f: $B77] {  # if_26
          $B76: {  # true
            %309:ptr<private, i32, read_write> = access %data, 1i
            %310:i32 = load %309
            %x_165:i32 = let %310
            %312:f32 = convert %x_165
            %313:f32 = div %312, 10.0f
            %314:f32 = add 0.5f, %313
            store %grey, %314
            exit_if  # if_26
          }
          $B77: {  # false
            %315:f32 = load_vector_element %gl_FragCoord, 1u
            %x_170:f32 = let %315
            %317:i32 = call %tint_f32_to_i32, %x_170
            %318:bool = lt %317, 90i
            if %318 [t: $B78, f: $B79] {  # if_27
              $B78: {  # true
                %319:ptr<private, i32, read_write> = access %data, 2i
                %320:i32 = load %319
                %x_177:i32 = let %320
                %322:f32 = convert %x_177
                %323:f32 = div %322, 10.0f
                %324:f32 = add 0.5f, %323
                store %grey, %324
                exit_if  # if_27
              }
              $B79: {  # false
                %325:f32 = load_vector_element %gl_FragCoord, 1u
                %x_182:f32 = let %325
                %327:i32 = call %tint_f32_to_i32, %x_182
                %328:bool = lt %327, 120i
                if %328 [t: $B80, f: $B81] {  # if_28
                  $B80: {  # true
                    %329:ptr<private, i32, read_write> = access %data, 3i
                    %330:i32 = load %329
                    %x_189:i32 = let %330
                    %332:f32 = convert %x_189
                    %333:f32 = div %332, 10.0f
                    %334:f32 = add 0.5f, %333
                    store %grey, %334
                    exit_if  # if_28
                  }
                  $B81: {  # false
                    %335:f32 = load_vector_element %gl_FragCoord, 1u
                    %x_194:f32 = let %335
                    %337:i32 = call %tint_f32_to_i32, %x_194
                    %338:bool = lt %337, 150i
                    if %338 [t: $B82, f: $B83] {  # if_29
                      $B82: {  # true
                        store %continue_execution, false
                        exit_if  # if_29
                      }
                      $B83: {  # false
                        %339:f32 = load_vector_element %gl_FragCoord, 1u
                        %x_201:f32 = let %339
                        %341:i32 = call %tint_f32_to_i32, %x_201
                        %342:bool = lt %341, 180i
                        if %342 [t: $B84, f: $B85] {  # if_30
                          $B84: {  # true
                            %343:ptr<private, i32, read_write> = access %data, 5i
                            %344:i32 = load %343
                            %x_208:i32 = let %344
                            %346:f32 = convert %x_208
                            %347:f32 = div %346, 10.0f
                            %348:f32 = add 0.5f, %347
                            store %grey, %348
                            exit_if  # if_30
                          }
                          $B85: {  # false
                            %349:f32 = load_vector_element %gl_FragCoord, 1u
                            %x_213:f32 = let %349
                            %351:i32 = call %tint_f32_to_i32, %x_213
                            %352:bool = lt %351, 210i
                            if %352 [t: $B86, f: $B87] {  # if_31
                              $B86: {  # true
                                %353:ptr<private, i32, read_write> = access %data, 6i
                                %354:i32 = load %353
                                %x_220:i32 = let %354
                                %356:f32 = convert %x_220
                                %357:f32 = div %356, 10.0f
                                %358:f32 = add 0.5f, %357
                                store %grey, %358
                                exit_if  # if_31
                              }
                              $B87: {  # false
                                %359:f32 = load_vector_element %gl_FragCoord, 1u
                                %x_225:f32 = let %359
                                %361:i32 = call %tint_f32_to_i32, %x_225
                                %362:bool = lt %361, 240i
                                if %362 [t: $B88, f: $B89] {  # if_32
                                  $B88: {  # true
                                    %363:ptr<private, i32, read_write> = access %data, 7i
                                    %364:i32 = load %363
                                    %x_232:i32 = let %364
                                    %366:f32 = convert %x_232
                                    %367:f32 = div %366, 10.0f
                                    %368:f32 = add 0.5f, %367
                                    store %grey, %368
                                    exit_if  # if_32
                                  }
                                  $B89: {  # false
                                    %369:f32 = load_vector_element %gl_FragCoord, 1u
                                    %x_237:f32 = let %369
                                    %371:i32 = call %tint_f32_to_i32, %x_237
                                    %372:bool = lt %371, 270i
                                    if %372 [t: $B90, f: $B91] {  # if_33
                                      $B90: {  # true
                                        %373:ptr<private, i32, read_write> = access %data, 8i
                                        %374:i32 = load %373
                                        %x_244:i32 = let %374
                                        %376:f32 = convert %x_244
                                        %377:f32 = div %376, 10.0f
                                        %378:f32 = add 0.5f, %377
                                        store %grey, %378
                                        exit_if  # if_33
                                      }
                                      $B91: {  # false
                                        store %continue_execution, false
                                        exit_if  # if_33
                                      }
                                    }
                                    exit_if  # if_32
                                  }
                                }
                                exit_if  # if_31
                              }
                            }
                            exit_if  # if_30
                          }
                        }
                        exit_if  # if_29
                      }
                    }
                    exit_if  # if_28
                  }
                }
                exit_if  # if_27
              }
            }
            exit_if  # if_26
          }
        }
        exit_if  # if_25
      }
    }
    %379:f32 = load %grey
    %x_248:f32 = let %379
    %381:vec3<f32> = construct %x_248, %x_248, %x_248
    %x_249:vec3<f32> = let %381
    %383:f32 = access %x_249, 0u
    %384:f32 = access %x_249, 1u
    %385:f32 = access %x_249, 2u
    %386:vec4<f32> = construct %383, %384, %385, 1.0f
    store %x_GLF_color, %386
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B92: {
    store %gl_FragCoord, %gl_FragCoord_param
    %389:void = call %main_1
    %390:vec4<f32> = load %x_GLF_color
    %391:main_out = construct %390
    %392:bool = load %continue_execution
    %393:bool = eq %392, false
    if %393 [t: $B93] {  # if_34
      $B93: {  # true
        terminate_invocation
      }
    }
    ret %391
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B94: {
    %395:i32 = convert %value
    %396:bool = gte %value, -2147483648.0f
    %397:i32 = select -2147483648i, %395, %396
    %398:bool = lte %value, 2147483520.0f
    %399:i32 = select 2147483647i, %397, %398
    ret %399
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
