Compiler projects using llvm
; 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
}