# 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 ...