Compiler projects using llvm
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s

---
name: cvt_f32_ubyte0_lshr_0
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_lshr_0
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 0
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_lshr_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_lshr_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_lshr_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_lshr_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_lshr_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_lshr_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_lshr_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_lshr_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_lshr_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_lshr_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_lshr_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_lshr_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 24
    ; CHECK-NEXT: %shift:_(s32) = G_LSHR %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte2_lshr_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte2_lshr_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte2_lshr_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte2_lshr_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 16
    ; CHECK-NEXT: %shift:_(s32) = G_LSHR %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte2_lshr_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte2_lshr_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 24
    ; CHECK-NEXT: %shift:_(s32) = G_LSHR %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte3_lshr_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte3_lshr_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 8
    ; CHECK-NEXT: %shift:_(s32) = G_LSHR %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_LSHR %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_zext_lshr_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_zext_lshr_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %trunc:_(s16) = G_TRUNC %arg
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s16) = G_LSHR %trunc, %shiftamt
    %zext:_(s32) = G_ZEXT %shift
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %zext
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_zext_lshr_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_zext_lshr_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %trunc:_(s16) = G_TRUNC %arg
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s16) = G_LSHR %trunc, %shiftamt
    %zext:_(s32) = G_ZEXT %shift
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %zext
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_zext_lshr_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_zext_lshr_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %trunc:_(s16) = G_TRUNC %arg
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s16) = G_LSHR %trunc, %shiftamt
    %zext:_(s32) = G_ZEXT %shift
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %zext
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_zext_lshr_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_zext_lshr_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %trunc:_(s16) = G_TRUNC %arg
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s16) = G_LSHR %trunc, %shiftamt
    %zext:_(s32) = G_ZEXT %shift
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %zext
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_shl_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_shl_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 8
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_shl_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_shl_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 8
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte2_shl_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte2_shl_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte3_shl_8
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte3_shl_8
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 8
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_shl_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_shl_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 16
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_shl_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_shl_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 16
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte2_shl_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte2_shl_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 16
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte3_shl_16
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte3_shl_16
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %arg
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 16
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte0_shl_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte0_shl_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 24
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE0 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte1_shl_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_shl_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 24
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte2_shl_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte2_shl_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 24
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE2 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte3_shl_24
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte3_shl_24
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 24
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 24
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    $vgpr0 = COPY %result
...

# Shift amount is wrong
---
name: cvt_f32_ubyte1_shl_7
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte1_shl_7
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 7
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 7
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE1 %shift
    $vgpr0 = COPY %result
...

---
name: cvt_f32_ubyte3_shl_17
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $vgpr0

    ; CHECK-LABEL: name: cvt_f32_ubyte3_shl_17
    ; CHECK: liveins: $vgpr0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %arg:_(s32) = COPY $vgpr0
    ; CHECK-NEXT: %shiftamt:_(s32) = G_CONSTANT i32 17
    ; CHECK-NEXT: %shift:_(s32) = G_SHL %arg, %shiftamt(s32)
    ; CHECK-NEXT: %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    ; CHECK-NEXT: $vgpr0 = COPY %result(s32)
    %arg:_(s32) = COPY $vgpr0
    %shiftamt:_(s32) = G_CONSTANT i32 17
    %shift:_(s32) = G_SHL %arg, %shiftamt
    %result:_(s32) = G_AMDGPU_CVT_F32_UBYTE3 %shift
    $vgpr0 = COPY %result
...