blob: 333b24a93684cfe18a609dd835ba7522f2d47301 [file] [log] [blame]
; 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
}