Compiler projects using llvm
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -mcpu=mips32r6 -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32R6
--- |

  %struct.MemSize3_Align1 = type { [3 x i8], i8 }
  %struct.MemSize3_Align2 = type { [3 x i8], i8 }
  %struct.MemSize3_Align4 = type { [3 x i8], i8 }
  %struct.MemSize3_Align8 = type { [3 x i8], i8, [4 x i8] }
  %struct.MemSize5_Align1 = type <{ [5 x i8], i16, i8 }>
  %struct.MemSize5_Align2 = type <{ [5 x i8], i16, i8 }>
  %struct.MemSize5_Align4 = type <{ [5 x i8], i16, i8 }>
  %struct.MemSize5_Align8 = type <{ [5 x i8], i16, i8 }>
  %struct.MemSize6_Align1 = type { [6 x i8], i16 }
  %struct.MemSize6_Align2 = type { [6 x i8], i16 }
  %struct.MemSize6_Align4 = type { [6 x i8], i16 }
  %struct.MemSize6_Align8 = type { [6 x i8], i16 }
  %struct.MemSize7_Align1 = type { [7 x i8], i8 }
  %struct.MemSize7_Align2 = type { [7 x i8], i8 }
  %struct.MemSize7_Align4 = type { [7 x i8], i8 }
  %struct.MemSize7_Align8 = type { [7 x i8], i8 }

  @double_align1 = common global double 0.000000e+00, align 1
  @double_align2 = common global double 0.000000e+00, align 2
  @double_align4 = common global double 0.000000e+00, align 4
  @double_align8 = common global double 0.000000e+00, align 8
  @i64_align1 = common global i64 0, align 1
  @i64_align2 = common global i64 0, align 2
  @i64_align4 = common global i64 0, align 4
  @i64_align8 = common global i64 0, align 8

  define i32 @load3align1(%struct.MemSize3_Align1* %S) {
  entry:
    %0 = bitcast %struct.MemSize3_Align1* %S to i24*
    %bf.load = load i24, i24* %0, align 1
    %bf.cast = zext i24 %bf.load to i32
    ret i32 %bf.cast
  }

  define i32 @load3align2(%struct.MemSize3_Align2* %S) {
  entry:
    %0 = bitcast %struct.MemSize3_Align2* %S to i24*
    %bf.load = load i24, i24* %0, align 2
    %bf.cast = zext i24 %bf.load to i32
    ret i32 %bf.cast
  }

  define i32 @load3align4(%struct.MemSize3_Align4* %S, i32 signext %a) {
  entry:
    %0 = bitcast %struct.MemSize3_Align4* %S to i24*
    %bf.load = load i24, i24* %0, align 4
    %bf.cast = zext i24 %bf.load to i32
    ret i32 %bf.cast
  }

  define i32 @load3align8(%struct.MemSize3_Align8* %S, i32 signext %a) {
  entry:
    %0 = bitcast %struct.MemSize3_Align8* %S to i24*
    %bf.load = load i24, i24* %0, align 8
    %bf.cast = zext i24 %bf.load to i32
    ret i32 %bf.cast
  }

  define i64 @load5align1(%struct.MemSize5_Align1* %S) {
  entry:
    %0 = bitcast %struct.MemSize5_Align1* %S to i40*
    %bf.load = load i40, i40* %0, align 1
    %bf.cast = zext i40 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load5align2(%struct.MemSize5_Align2* %S) {
  entry:
    %0 = bitcast %struct.MemSize5_Align2* %S to i40*
    %bf.load = load i40, i40* %0, align 2
    %bf.cast = zext i40 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load5align4(%struct.MemSize5_Align4* %S) {
  entry:
    %0 = bitcast %struct.MemSize5_Align4* %S to i40*
    %bf.load = load i40, i40* %0, align 4
    %bf.cast = zext i40 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load5align8(%struct.MemSize5_Align8* %S) {
  entry:
    %0 = bitcast %struct.MemSize5_Align8* %S to i40*
    %bf.load = load i40, i40* %0, align 8
    %bf.cast = zext i40 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load6align1(%struct.MemSize6_Align1* %S) {
  entry:
    %0 = bitcast %struct.MemSize6_Align1* %S to i48*
    %bf.load = load i48, i48* %0, align 1
    %bf.cast = zext i48 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load6align2(%struct.MemSize6_Align2* %S) {
  entry:
    %0 = bitcast %struct.MemSize6_Align2* %S to i48*
    %bf.load = load i48, i48* %0, align 2
    %bf.cast = zext i48 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load6align4(%struct.MemSize6_Align4* %S) {
  entry:
    %0 = bitcast %struct.MemSize6_Align4* %S to i48*
    %bf.load = load i48, i48* %0, align 4
    %bf.cast = zext i48 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load6align8(%struct.MemSize6_Align8* %S) {
  entry:
    %0 = bitcast %struct.MemSize6_Align8* %S to i48*
    %bf.load = load i48, i48* %0, align 8
    %bf.cast = zext i48 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load7align1(%struct.MemSize7_Align1* %S) {
  entry:
    %0 = bitcast %struct.MemSize7_Align1* %S to i56*
    %bf.load = load i56, i56* %0, align 1
    %bf.cast = zext i56 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load7align2(%struct.MemSize7_Align2* %S) {
  entry:
    %0 = bitcast %struct.MemSize7_Align2* %S to i56*
    %bf.load = load i56, i56* %0, align 2
    %bf.cast = zext i56 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load7align4(%struct.MemSize7_Align4* %S) {
  entry:
    %0 = bitcast %struct.MemSize7_Align4* %S to i56*
    %bf.load = load i56, i56* %0, align 4
    %bf.cast = zext i56 %bf.load to i64
    ret i64 %bf.cast
  }

  define i64 @load7align8(%struct.MemSize7_Align8* %S) {
  entry:
    %0 = bitcast %struct.MemSize7_Align8* %S to i56*
    %bf.load = load i56, i56* %0, align 8
    %bf.cast = zext i56 %bf.load to i64
    ret i64 %bf.cast
  }

  define double @load_double_align1() {
  entry:
    %0 = load double, double* @double_align1, align 1
    ret double %0
  }

  define double @load_double_align2() {
  entry:
    %0 = load double, double* @double_align2, align 2
    ret double %0
  }

  define double @load_double_align4() {
  entry:
    %0 = load double, double* @double_align4, align 4
    ret double %0
  }

  define double @load_double_align8() {
  entry:
    %0 = load double, double* @double_align8, align 8
    ret double %0
  }

  define i64 @load_i64_align1() {
  entry:
    %0 = load i64, i64* @i64_align1, align 1
    ret i64 %0
  }

  define i64 @load_i64_align2() {
  entry:
    %0 = load i64, i64* @i64_align2, align 2
    ret i64 %0
  }

  define i64 @load_i64_align4() {
  entry:
    %0 = load i64, i64* @i64_align4, align 4
    ret i64 %0
  }

  define i64 @load_i64_align8() {
  entry:
    %0 = load i64, i64* @i64_align8, align 8
    ret i64 %0
  }

...
---
name:            load3align1
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load3align1
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32: $v0 = COPY [[AND]](s32)
    ; MIPS32: RetRA implicit $v0
    ; MIPS32R6-LABEL: name: load3align1
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32R6: $v0 = COPY [[AND]](s32)
    ; MIPS32R6: RetRA implicit $v0
    %0:_(p0) = COPY $a0
    %1:_(s24) = G_LOAD %0(p0) :: (load 3 from %ir.0, align 1)
    %2:_(s32) = G_ZEXT %1(s24)
    $v0 = COPY %2(s32)
    RetRA implicit $v0

...
---
name:            load3align2
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load3align2
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32: $v0 = COPY [[AND]](s32)
    ; MIPS32: RetRA implicit $v0
    ; MIPS32R6-LABEL: name: load3align2
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32R6: $v0 = COPY [[AND]](s32)
    ; MIPS32R6: RetRA implicit $v0
    %0:_(p0) = COPY $a0
    %1:_(s24) = G_LOAD %0(p0) :: (load 3 from %ir.0, align 2)
    %2:_(s32) = G_ZEXT %1(s24)
    $v0 = COPY %2(s32)
    RetRA implicit $v0

...
---
name:            load3align4
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0, $a1

    ; MIPS32-LABEL: name: load3align4
    ; MIPS32: liveins: $a0, $a1
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32: $v0 = COPY [[AND]](s32)
    ; MIPS32: RetRA implicit $v0
    ; MIPS32R6-LABEL: name: load3align4
    ; MIPS32R6: liveins: $a0, $a1
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32R6: $v0 = COPY [[AND]](s32)
    ; MIPS32R6: RetRA implicit $v0
    %0:_(p0) = COPY $a0
    %2:_(s24) = G_LOAD %0(p0) :: (load 3 from %ir.0, align 4)
    %3:_(s32) = G_ZEXT %2(s24)
    $v0 = COPY %3(s32)
    RetRA implicit $v0

...
---
name:            load3align8
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0, $a1

    ; MIPS32-LABEL: name: load3align8
    ; MIPS32: liveins: $a0, $a1
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32: $v0 = COPY [[AND]](s32)
    ; MIPS32: RetRA implicit $v0
    ; MIPS32R6-LABEL: name: load3align8
    ; MIPS32R6: liveins: $a0, $a1
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LOAD]](s32)
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
    ; MIPS32R6: $v0 = COPY [[AND]](s32)
    ; MIPS32R6: RetRA implicit $v0
    %0:_(p0) = COPY $a0
    %2:_(s24) = G_LOAD %0(p0) :: (load 3 from %ir.0, align 8)
    %3:_(s32) = G_ZEXT %2(s24)
    $v0 = COPY %3(s32)
    RetRA implicit $v0

...
---
name:            load5align1
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load5align1
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load5align1
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s40) = G_LOAD %0(p0) :: (load 5 from %ir.0, align 1)
    %2:_(s64) = G_ZEXT %1(s40)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load5align2
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load5align2
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4, align 2)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load5align2
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4, align 2)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s40) = G_LOAD %0(p0) :: (load 5 from %ir.0, align 2)
    %2:_(s64) = G_ZEXT %1(s40)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load5align4
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load5align4
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4, align 4)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load5align4
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4, align 4)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s40) = G_LOAD %0(p0) :: (load 5 from %ir.0, align 4)
    %2:_(s64) = G_ZEXT %1(s40)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load5align8
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load5align8
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4, align 8)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load5align8
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 1 from %ir.0 + 4, align 8)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s40) = G_LOAD %0(p0) :: (load 5 from %ir.0, align 8)
    %2:_(s64) = G_ZEXT %1(s40)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load6align1
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load6align1
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 1)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load6align1
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4, align 1)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s48) = G_LOAD %0(p0) :: (load 6 from %ir.0, align 1)
    %2:_(s64) = G_ZEXT %1(s48)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load6align2
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load6align2
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load6align2
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s48) = G_LOAD %0(p0) :: (load 6 from %ir.0, align 2)
    %2:_(s64) = G_ZEXT %1(s48)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load6align4
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load6align4
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4, align 4)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load6align4
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4, align 4)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s48) = G_LOAD %0(p0) :: (load 6 from %ir.0, align 4)
    %2:_(s64) = G_ZEXT %1(s48)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load6align8
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load6align8
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4, align 8)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load6align8
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 2 from %ir.0 + 4, align 8)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s48) = G_LOAD %0(p0) :: (load 6 from %ir.0, align 8)
    %2:_(s64) = G_ZEXT %1(s48)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load7align1
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load7align1
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 1)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load7align1
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 1)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 1)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s56) = G_LOAD %0(p0) :: (load 7 from %ir.0, align 1)
    %2:_(s64) = G_ZEXT %1(s56)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load7align2
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load7align2
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 2)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load7align2
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 2)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 2)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s56) = G_LOAD %0(p0) :: (load 7 from %ir.0, align 2)
    %2:_(s64) = G_ZEXT %1(s56)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load7align4
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load7align4
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load7align4
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s56) = G_LOAD %0(p0) :: (load 7 from %ir.0, align 4)
    %2:_(s64) = G_ZEXT %1(s56)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load7align8
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    liveins: $a0

    ; MIPS32-LABEL: name: load7align8
    ; MIPS32: liveins: $a0
    ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 8)
    ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load7align8
    ; MIPS32R6: liveins: $a0
    ; MIPS32R6: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
    ; MIPS32R6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32R6: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.0, align 8)
    ; MIPS32R6: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load 4 from %ir.0 + 4, align 8)
    ; MIPS32R6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
    ; MIPS32R6: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
    ; MIPS32R6: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C1]]
    ; MIPS32R6: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LOAD1]], [[C2]]
    ; MIPS32R6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %0:_(p0) = COPY $a0
    %1:_(s56) = G_LOAD %0(p0) :: (load 7 from %ir.0, align 8)
    %2:_(s64) = G_ZEXT %1(s56)
    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
    $v0 = COPY %3(s32)
    $v1 = COPY %4(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load_double_align1
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_double_align1
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align1
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[GV]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load 4 from @double_align1, align 1)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load 4 from @double_align1 + 4, align 1)
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD]](s32), [[LOAD1]](s32)
    ; MIPS32: $d0 = COPY [[MV]](s64)
    ; MIPS32: RetRA implicit $d0
    ; MIPS32R6-LABEL: name: load_double_align1
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align1
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @double_align1, align 1)
    ; MIPS32R6: $d0 = COPY [[LOAD]](s64)
    ; MIPS32R6: RetRA implicit $d0
    %1:_(p0) = G_GLOBAL_VALUE @double_align1
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @double_align1, align 1)
    $d0 = COPY %0(s64)
    RetRA implicit $d0

...
---
name:            load_double_align2
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_double_align2
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align2
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[GV]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load 4 from @double_align2, align 2)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load 4 from @double_align2 + 4, align 2)
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD]](s32), [[LOAD1]](s32)
    ; MIPS32: $d0 = COPY [[MV]](s64)
    ; MIPS32: RetRA implicit $d0
    ; MIPS32R6-LABEL: name: load_double_align2
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align2
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @double_align2, align 2)
    ; MIPS32R6: $d0 = COPY [[LOAD]](s64)
    ; MIPS32R6: RetRA implicit $d0
    %1:_(p0) = G_GLOBAL_VALUE @double_align2
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @double_align2, align 2)
    $d0 = COPY %0(s64)
    RetRA implicit $d0

...
---
name:            load_double_align4
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_double_align4
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align4
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[GV]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load 4 from @double_align4)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load 4 from @double_align4 + 4)
    ; MIPS32: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD]](s32), [[LOAD1]](s32)
    ; MIPS32: $d0 = COPY [[MV]](s64)
    ; MIPS32: RetRA implicit $d0
    ; MIPS32R6-LABEL: name: load_double_align4
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align4
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @double_align4, align 4)
    ; MIPS32R6: $d0 = COPY [[LOAD]](s64)
    ; MIPS32R6: RetRA implicit $d0
    %1:_(p0) = G_GLOBAL_VALUE @double_align4
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @double_align4, align 4)
    $d0 = COPY %0(s64)
    RetRA implicit $d0

...
---
name:            load_double_align8
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_double_align8
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align8
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @double_align8)
    ; MIPS32: $d0 = COPY [[LOAD]](s64)
    ; MIPS32: RetRA implicit $d0
    ; MIPS32R6-LABEL: name: load_double_align8
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @double_align8
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @double_align8)
    ; MIPS32R6: $d0 = COPY [[LOAD]](s64)
    ; MIPS32R6: RetRA implicit $d0
    %1:_(p0) = G_GLOBAL_VALUE @double_align8
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @double_align8)
    $d0 = COPY %0(s64)
    RetRA implicit $d0

...
---
name:            load_i64_align1
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_i64_align1
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align1
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[GV]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load 4 from @i64_align1, align 1)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load 4 from @i64_align1 + 4, align 1)
    ; MIPS32: $v0 = COPY [[LOAD]](s32)
    ; MIPS32: $v1 = COPY [[LOAD1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load_i64_align1
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align1
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @i64_align1, align 1)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %1:_(p0) = G_GLOBAL_VALUE @i64_align1
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @i64_align1, align 1)
    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(s64)
    $v0 = COPY %2(s32)
    $v1 = COPY %3(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load_i64_align2
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_i64_align2
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align2
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[GV]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load 4 from @i64_align2, align 2)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load 4 from @i64_align2 + 4, align 2)
    ; MIPS32: $v0 = COPY [[LOAD]](s32)
    ; MIPS32: $v1 = COPY [[LOAD1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load_i64_align2
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align2
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @i64_align2, align 2)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %1:_(p0) = G_GLOBAL_VALUE @i64_align2
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @i64_align2, align 2)
    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(s64)
    $v0 = COPY %2(s32)
    $v1 = COPY %3(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load_i64_align4
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_i64_align4
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align4
    ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
    ; MIPS32: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[GV]], [[C]](s32)
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load 4 from @i64_align4)
    ; MIPS32: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (dereferenceable load 4 from @i64_align4 + 4)
    ; MIPS32: $v0 = COPY [[LOAD]](s32)
    ; MIPS32: $v1 = COPY [[LOAD1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load_i64_align4
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align4
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @i64_align4, align 4)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %1:_(p0) = G_GLOBAL_VALUE @i64_align4
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @i64_align4, align 4)
    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(s64)
    $v0 = COPY %2(s32)
    $v1 = COPY %3(s32)
    RetRA implicit $v0, implicit $v1

...
---
name:            load_i64_align8
alignment:       4
tracksRegLiveness: true
body:             |
  bb.1.entry:
    ; MIPS32-LABEL: name: load_i64_align8
    ; MIPS32: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align8
    ; MIPS32: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @i64_align8)
    ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](s64)
    ; MIPS32: $v0 = COPY [[UV]](s32)
    ; MIPS32: $v1 = COPY [[UV1]](s32)
    ; MIPS32: RetRA implicit $v0, implicit $v1
    ; MIPS32R6-LABEL: name: load_i64_align8
    ; MIPS32R6: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @i64_align8
    ; MIPS32R6: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV]](p0) :: (dereferenceable load 8 from @i64_align8)
    ; MIPS32R6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](s64)
    ; MIPS32R6: $v0 = COPY [[UV]](s32)
    ; MIPS32R6: $v1 = COPY [[UV1]](s32)
    ; MIPS32R6: RetRA implicit $v0, implicit $v1
    %1:_(p0) = G_GLOBAL_VALUE @i64_align8
    %0:_(s64) = G_LOAD %1(p0) :: (dereferenceable load 8 from @i64_align8)
    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(s64)
    $v0 = COPY %2(s32)
    $v1 = COPY %3(s32)
    RetRA implicit $v0, implicit $v1

...