| ; RUN: llc -march=mips -mcpu=mips32r5 -mattr=+fp64,+msa,+nooddspreg < %s | FileCheck %s |
| |
| ; Test that the register allocator honours +nooddspreg and does not pick an odd |
| ; single precision subregister of an MSA register. |
| |
| @f1 = external global float |
| |
| @f2 = external global float |
| |
| @v3 = external global <4 x float> |
| |
| @d1 = external global double |
| |
| define void @test() { |
| ; CHECK-LABEL: test: |
| entry: |
| ; CHECK-NOT: lwc1 $f{{[13579]+}} |
| ; CHECK: lwc1 $f{{[02468]+}} |
| %0 = load float, float * @f1 |
| %1 = insertelement <4 x float> undef, float %0, i32 0 |
| %2 = insertelement <4 x float> %1, float %0, i32 1 |
| %3 = insertelement <4 x float> %2, float %0, i32 2 |
| %4 = insertelement <4 x float> %3, float %0, i32 3 |
| |
| ; CHECK-NOT: lwc1 $f{{[13579]+}} |
| ; CHECK: lwc1 $f{{[02468]+}} |
| %5 = load float, float * @f2 |
| %6 = insertelement <4 x float> undef, float %5, i32 0 |
| %7 = insertelement <4 x float> %6, float %5, i32 1 |
| %8 = insertelement <4 x float> %7, float %5, i32 2 |
| %9 = insertelement <4 x float> %8, float %5, i32 3 |
| |
| %10 = fadd <4 x float> %4, %9 |
| store <4 x float> %10, <4 x float> * @v3 |
| ret void |
| } |
| |
| ; Test that the register allocator hnours +noodspreg and does not pick an odd |
| ; single precision register for a load to perform a conversion to a double. |
| |
| define void @test2() { |
| ; CHECK-LABEL: test2: |
| entry: |
| ; CHECK-NOT: lwc1 $f{{[13579]+}} |
| ; CHECK: lwc1 $f{{[02468]+}} |
| %0 = load float, float * @f1 |
| %1 = fpext float %0 to double |
| ; CHECK-NOT: lwc1 $f{{[13579]+}} |
| ; CHECK: lwc1 $f{{[02468]+}} |
| %2 = load float, float * @f2 |
| %3 = fpext float %2 to double |
| %4 = fadd double %1, %3 |
| store double%4, double * @d1 |
| ret void |
| } |