; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32 ; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -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 void @store3align1(%struct.MemSize3_Align1* %S, i32 signext %a) { ; MIPS32-LABEL: store3align1: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sb $5, 0($4) ; MIPS32-NEXT: srl $1, $5, 8 ; MIPS32-NEXT: sb $1, 1($4) ; MIPS32-NEXT: srl $1, $5, 16 ; MIPS32-NEXT: sb $1, 2($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store3align1: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sh $5, 0($4) ; MIPS32R6-NEXT: srl $1, $5, 16 ; MIPS32R6-NEXT: sb $1, 2($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize3_Align1* %S to i24* %1 = trunc i32 %a to i24 store i24 %1, i24* %0, align 1 ret void } define void @store3align2(%struct.MemSize3_Align2* %S, i32 signext %a) { ; MIPS32-LABEL: store3align2: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sh $5, 0($4) ; MIPS32-NEXT: srl $1, $5, 16 ; MIPS32-NEXT: sb $1, 2($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store3align2: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sh $5, 0($4) ; MIPS32R6-NEXT: srl $1, $5, 16 ; MIPS32R6-NEXT: sb $1, 2($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize3_Align2* %S to i24* %1 = trunc i32 %a to i24 store i24 %1, i24* %0, align 2 ret void } define void @store3align4(%struct.MemSize3_Align4* %S, i32 signext %a) { ; MIPS32-LABEL: store3align4: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sh $5, 0($4) ; MIPS32-NEXT: srl $1, $5, 16 ; MIPS32-NEXT: sb $1, 2($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store3align4: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sh $5, 0($4) ; MIPS32R6-NEXT: srl $1, $5, 16 ; MIPS32R6-NEXT: sb $1, 2($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize3_Align4* %S to i24* %1 = trunc i32 %a to i24 store i24 %1, i24* %0, align 4 ret void } define void @store3align8(%struct.MemSize3_Align8* %S, i32 signext %a) { ; MIPS32-LABEL: store3align8: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sh $5, 0($4) ; MIPS32-NEXT: srl $1, $5, 16 ; MIPS32-NEXT: sb $1, 2($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store3align8: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sh $5, 0($4) ; MIPS32R6-NEXT: srl $1, $5, 16 ; MIPS32R6-NEXT: sb $1, 2($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize3_Align8* %S to i24* %1 = trunc i32 %a to i24 store i24 %1, i24* %0, align 8 ret void } define void @store5align1(%struct.MemSize5_Align1* %S, i64 %a) { ; MIPS32-LABEL: store5align1: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: swl $6, 3($4) ; MIPS32-NEXT: swr $6, 0($4) ; MIPS32-NEXT: sb $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store5align1: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sb $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize5_Align1* %S to i40* %1 = trunc i64 %a to i40 store i40 %1, i40* %0, align 1 ret void } define void @store5align2(%struct.MemSize5_Align2* %S, i64 %a) { ; MIPS32-LABEL: store5align2: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: swl $6, 3($4) ; MIPS32-NEXT: swr $6, 0($4) ; MIPS32-NEXT: sb $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store5align2: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sb $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize5_Align2* %S to i40* %1 = trunc i64 %a to i40 store i40 %1, i40* %0, align 2 ret void } define void @store5align4(%struct.MemSize5_Align4* %S, i64 %a) { ; MIPS32-LABEL: store5align4: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sw $6, 0($4) ; MIPS32-NEXT: sb $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store5align4: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sb $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize5_Align4* %S to i40* %1 = trunc i64 %a to i40 store i40 %1, i40* %0, align 4 ret void } define void @store5align8(%struct.MemSize5_Align8* %S, i64 %a) { ; MIPS32-LABEL: store5align8: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sw $6, 0($4) ; MIPS32-NEXT: sb $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store5align8: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sb $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize5_Align8* %S to i40* %1 = trunc i64 %a to i40 store i40 %1, i40* %0, align 8 ret void } define void @store6align1(%struct.MemSize6_Align1* %S, i64 %a) { ; MIPS32-LABEL: store6align1: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: ori $1, $zero, 4 ; MIPS32-NEXT: addu $2, $4, $1 ; MIPS32-NEXT: swl $6, 3($4) ; MIPS32-NEXT: swr $6, 0($4) ; MIPS32-NEXT: sb $7, 4($4) ; MIPS32-NEXT: srl $1, $7, 8 ; MIPS32-NEXT: sb $1, 1($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store6align1: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize6_Align1* %S to i48* %1 = trunc i64 %a to i48 store i48 %1, i48* %0, align 1 ret void } define void @store6align2(%struct.MemSize6_Align2* %S, i64 %a) { ; MIPS32-LABEL: store6align2: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: swl $6, 3($4) ; MIPS32-NEXT: swr $6, 0($4) ; MIPS32-NEXT: sh $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store6align2: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize6_Align2* %S to i48* %1 = trunc i64 %a to i48 store i48 %1, i48* %0, align 2 ret void } define void @store6align4(%struct.MemSize6_Align4* %S, i64 %a) { ; MIPS32-LABEL: store6align4: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sw $6, 0($4) ; MIPS32-NEXT: sh $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store6align4: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize6_Align4* %S to i48* %1 = trunc i64 %a to i48 store i48 %1, i48* %0, align 4 ret void } define void @store6align8(%struct.MemSize6_Align8* %S, i64 %a) { ; MIPS32-LABEL: store6align8: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: sw $6, 0($4) ; MIPS32-NEXT: sh $7, 4($4) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store6align8: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize6_Align8* %S to i48* %1 = trunc i64 %a to i48 store i48 %1, i48* %0, align 8 ret void } define void @store7align1(%struct.MemSize7_Align1* %S, i64 %a) { ; MIPS32-LABEL: store7align1: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: ori $1, $zero, 4 ; MIPS32-NEXT: addu $2, $4, $1 ; MIPS32-NEXT: swl $6, 3($4) ; MIPS32-NEXT: swr $6, 0($4) ; MIPS32-NEXT: sb $7, 4($4) ; MIPS32-NEXT: srl $1, $7, 8 ; MIPS32-NEXT: sb $1, 1($2) ; MIPS32-NEXT: srl $1, $7, 16 ; MIPS32-NEXT: sb $1, 2($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store7align1: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: ori $1, $zero, 4 ; MIPS32R6-NEXT: addu $2, $4, $1 ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: srl $1, $7, 16 ; MIPS32R6-NEXT: sb $1, 2($2) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize7_Align1* %S to i56* %1 = trunc i64 %a to i56 store i56 %1, i56* %0, align 1 ret void } define void @store7align2(%struct.MemSize7_Align2* %S, i64 %a) { ; MIPS32-LABEL: store7align2: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: ori $1, $zero, 4 ; MIPS32-NEXT: addu $2, $4, $1 ; MIPS32-NEXT: swl $6, 3($4) ; MIPS32-NEXT: swr $6, 0($4) ; MIPS32-NEXT: sh $7, 4($4) ; MIPS32-NEXT: srl $1, $7, 16 ; MIPS32-NEXT: sb $1, 2($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store7align2: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: ori $1, $zero, 4 ; MIPS32R6-NEXT: addu $2, $4, $1 ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: srl $1, $7, 16 ; MIPS32R6-NEXT: sb $1, 2($2) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize7_Align2* %S to i56* %1 = trunc i64 %a to i56 store i56 %1, i56* %0, align 2 ret void } define void @store7align4(%struct.MemSize7_Align4* %S, i64 %a) { ; MIPS32-LABEL: store7align4: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: ori $1, $zero, 4 ; MIPS32-NEXT: addu $2, $4, $1 ; MIPS32-NEXT: sw $6, 0($4) ; MIPS32-NEXT: sh $7, 4($4) ; MIPS32-NEXT: srl $1, $7, 16 ; MIPS32-NEXT: sb $1, 2($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store7align4: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: ori $1, $zero, 4 ; MIPS32R6-NEXT: addu $2, $4, $1 ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: srl $1, $7, 16 ; MIPS32R6-NEXT: sb $1, 2($2) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize7_Align4* %S to i56* %1 = trunc i64 %a to i56 store i56 %1, i56* %0, align 4 ret void } define void @store7align8(%struct.MemSize7_Align8* %S, i64 %a) { ; MIPS32-LABEL: store7align8: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: ori $1, $zero, 4 ; MIPS32-NEXT: addu $2, $4, $1 ; MIPS32-NEXT: sw $6, 0($4) ; MIPS32-NEXT: sh $7, 4($4) ; MIPS32-NEXT: srl $1, $7, 16 ; MIPS32-NEXT: sb $1, 2($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store7align8: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: ori $1, $zero, 4 ; MIPS32R6-NEXT: addu $2, $4, $1 ; MIPS32R6-NEXT: sw $6, 0($4) ; MIPS32R6-NEXT: sh $7, 4($4) ; MIPS32R6-NEXT: srl $1, $7, 16 ; MIPS32R6-NEXT: sb $1, 2($2) ; MIPS32R6-NEXT: jrc $ra entry: %0 = bitcast %struct.MemSize7_Align8* %S to i56* %1 = trunc i64 %a to i56 store i56 %1, i56* %0, align 8 ret void } define void @store_double_align1(double %a) { ; MIPS32-LABEL: store_double_align1: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(double_align1) ; MIPS32-NEXT: addiu $2, $1, %lo(double_align1) ; MIPS32-NEXT: mfc1 $3, $f12 ; MIPS32-NEXT: mfc1 $1, $f13 ; MIPS32-NEXT: swl $3, 3($2) ; MIPS32-NEXT: swr $3, 0($2) ; MIPS32-NEXT: swl $1, 7($2) ; MIPS32-NEXT: swr $1, 4($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_double_align1: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(double_align1) ; MIPS32R6-NEXT: addiu $1, $1, %lo(double_align1) ; MIPS32R6-NEXT: sdc1 $f12, 0($1) ; MIPS32R6-NEXT: jrc $ra entry: store double %a, double* @double_align1, align 1 ret void } define void @store_double_align2(double %a) { ; MIPS32-LABEL: store_double_align2: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(double_align2) ; MIPS32-NEXT: addiu $2, $1, %lo(double_align2) ; MIPS32-NEXT: mfc1 $3, $f12 ; MIPS32-NEXT: mfc1 $1, $f13 ; MIPS32-NEXT: swl $3, 3($2) ; MIPS32-NEXT: swr $3, 0($2) ; MIPS32-NEXT: swl $1, 7($2) ; MIPS32-NEXT: swr $1, 4($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_double_align2: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(double_align2) ; MIPS32R6-NEXT: addiu $1, $1, %lo(double_align2) ; MIPS32R6-NEXT: sdc1 $f12, 0($1) ; MIPS32R6-NEXT: jrc $ra entry: store double %a, double* @double_align2, align 2 ret void } define void @store_double_align4(double %a) { ; MIPS32-LABEL: store_double_align4: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(double_align4) ; MIPS32-NEXT: addiu $2, $1, %lo(double_align4) ; MIPS32-NEXT: mfc1 $3, $f12 ; MIPS32-NEXT: mfc1 $1, $f13 ; MIPS32-NEXT: sw $3, 0($2) ; MIPS32-NEXT: sw $1, 4($2) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_double_align4: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(double_align4) ; MIPS32R6-NEXT: addiu $1, $1, %lo(double_align4) ; MIPS32R6-NEXT: sdc1 $f12, 0($1) ; MIPS32R6-NEXT: jrc $ra entry: store double %a, double* @double_align4, align 4 ret void } define void @store_double_align8(double %a) { ; MIPS32-LABEL: store_double_align8: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(double_align8) ; MIPS32-NEXT: addiu $1, $1, %lo(double_align8) ; MIPS32-NEXT: sdc1 $f12, 0($1) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_double_align8: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(double_align8) ; MIPS32R6-NEXT: addiu $1, $1, %lo(double_align8) ; MIPS32R6-NEXT: sdc1 $f12, 0($1) ; MIPS32R6-NEXT: jrc $ra entry: store double %a, double* @double_align8, align 8 ret void } define void @store_i64_align1(i64 %a) { ; MIPS32-LABEL: store_i64_align1: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(i64_align1) ; MIPS32-NEXT: addiu $1, $1, %lo(i64_align1) ; MIPS32-NEXT: swl $4, 3($1) ; MIPS32-NEXT: swr $4, 0($1) ; MIPS32-NEXT: swl $5, 7($1) ; MIPS32-NEXT: swr $5, 4($1) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_i64_align1: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(i64_align1) ; MIPS32R6-NEXT: addiu $1, $1, %lo(i64_align1) ; MIPS32R6-NEXT: sw $4, 0($1) ; MIPS32R6-NEXT: sw $5, 4($1) ; MIPS32R6-NEXT: jrc $ra entry: store i64 %a, i64* @i64_align1, align 1 ret void } define void @store_i64_align2(i64 signext %a) { ; MIPS32-LABEL: store_i64_align2: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(i64_align2) ; MIPS32-NEXT: addiu $1, $1, %lo(i64_align2) ; MIPS32-NEXT: swl $4, 3($1) ; MIPS32-NEXT: swr $4, 0($1) ; MIPS32-NEXT: swl $5, 7($1) ; MIPS32-NEXT: swr $5, 4($1) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_i64_align2: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(i64_align2) ; MIPS32R6-NEXT: addiu $1, $1, %lo(i64_align2) ; MIPS32R6-NEXT: sw $4, 0($1) ; MIPS32R6-NEXT: sw $5, 4($1) ; MIPS32R6-NEXT: jrc $ra entry: store i64 %a, i64* @i64_align2, align 2 ret void } define void @store_i64_align4(i64 %a) { ; MIPS32-LABEL: store_i64_align4: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(i64_align4) ; MIPS32-NEXT: addiu $1, $1, %lo(i64_align4) ; MIPS32-NEXT: sw $4, 0($1) ; MIPS32-NEXT: sw $5, 4($1) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_i64_align4: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(i64_align4) ; MIPS32R6-NEXT: addiu $1, $1, %lo(i64_align4) ; MIPS32R6-NEXT: sw $4, 0($1) ; MIPS32R6-NEXT: sw $5, 4($1) ; MIPS32R6-NEXT: jrc $ra entry: store i64 %a, i64* @i64_align4, align 4 ret void } define void @store_i64_align8(i64 signext %a) { ; MIPS32-LABEL: store_i64_align8: ; MIPS32: # %bb.0: # %entry ; MIPS32-NEXT: lui $1, %hi(i64_align8) ; MIPS32-NEXT: addiu $1, $1, %lo(i64_align8) ; MIPS32-NEXT: sw $4, 0($1) ; MIPS32-NEXT: sw $5, 4($1) ; MIPS32-NEXT: jr $ra ; MIPS32-NEXT: nop ; ; MIPS32R6-LABEL: store_i64_align8: ; MIPS32R6: # %bb.0: # %entry ; MIPS32R6-NEXT: lui $1, %hi(i64_align8) ; MIPS32R6-NEXT: addiu $1, $1, %lo(i64_align8) ; MIPS32R6-NEXT: sw $4, 0($1) ; MIPS32R6-NEXT: sw $5, 4($1) ; MIPS32R6-NEXT: jrc $ra entry: store i64 %a, i64* @i64_align8, align 8 ret void }