11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2- ; RUN: llc --mtriple=loongarch32 -mattr=+32s,+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA32
3- ; RUN: llc --mtriple=loongarch64 -mattr=+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA64
2+ ; RUN: llc --mtriple=loongarch32 -mattr=+32s,+lasx < %s | FileCheck %s
3+ ; RUN: llc --mtriple=loongarch64 -mattr=+lasx < %s | FileCheck %s
44
55define <8 x float > @fadd_elt0_v8f32 (float %a ) nounwind {
66; CHECK-LABEL: fadd_elt0_v8f32:
77; CHECK: # %bb.0: # %entry
8- ; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
9- ; CHECK-NEXT: lu12i.w $a0, 260096
10- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
11- ; CHECK-NEXT: xvfadd.s $xr0, $xr0, $xr1
8+ ; CHECK-NEXT: vldi $vr1, -1168
9+ ; CHECK-NEXT: fadd.s $fa0, $fa0, $fa1
1210; CHECK-NEXT: ret
1311entry:
1412 %b = insertelement <8 x float > poison, float %a , i32 0
@@ -17,20 +15,11 @@ entry:
1715}
1816
1917define <4 x double > @fadd_elt0_v4f64 (double %a ) nounwind {
20- ; LA32-LABEL: fadd_elt0_v4f64:
21- ; LA32: # %bb.0: # %entry
22- ; LA32-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
23- ; LA32-NEXT: vldi $vr1, -912
24- ; LA32-NEXT: xvfadd.d $xr0, $xr0, $xr1
25- ; LA32-NEXT: ret
26- ;
27- ; LA64-LABEL: fadd_elt0_v4f64:
28- ; LA64: # %bb.0: # %entry
29- ; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
30- ; LA64-NEXT: lu52i.d $a0, $zero, 1023
31- ; LA64-NEXT: xvreplgr2vr.d $xr1, $a0
32- ; LA64-NEXT: xvfadd.d $xr0, $xr0, $xr1
33- ; LA64-NEXT: ret
18+ ; CHECK-LABEL: fadd_elt0_v4f64:
19+ ; CHECK: # %bb.0: # %entry
20+ ; CHECK-NEXT: vldi $vr1, -912
21+ ; CHECK-NEXT: fadd.d $fa0, $fa0, $fa1
22+ ; CHECK-NEXT: ret
3423entry:
3524 %b = insertelement <4 x double > poison, double %a , i32 0
3625 %c = fadd <4 x double > %b , <double 1 .0 , double poison, double poison, double poison>
@@ -40,11 +29,8 @@ entry:
4029define <8 x float > @fsub_splat_v8f32 (float %a , float %b ) nounwind {
4130; CHECK-LABEL: fsub_splat_v8f32:
4231; CHECK: # %bb.0: # %entry
43- ; CHECK-NEXT: # kill: def $f1 killed $f1 def $vr1
44- ; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0
45- ; CHECK-NEXT: vfsub.s $vr0, $vr0, $vr1
46- ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
47- ; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 0
32+ ; CHECK-NEXT: fsub.s $fa0, $fa0, $fa1
33+ ; CHECK-NEXT: xvreplve0.w $xr0, $xr0
4834; CHECK-NEXT: ret
4935entry:
5036 %insa = insertelement <8 x float > poison, float %a , i32 0
@@ -56,24 +42,12 @@ entry:
5642}
5743
5844define <4 x double > @fsub_splat_v4f64 (double %a ) nounwind {
59- ; LA32-LABEL: fsub_splat_v4f64:
60- ; LA32: # %bb.0: # %entry
61- ; LA32-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
62- ; LA32-NEXT: vldi $vr1, -784
63- ; LA32-NEXT: xvfadd.d $xr0, $xr0, $xr1
64- ; LA32-NEXT: xvpermi.d $xr0, $xr0, 68
65- ; LA32-NEXT: xvrepl128vei.d $xr0, $xr0, 0
66- ; LA32-NEXT: ret
67- ;
68- ; LA64-LABEL: fsub_splat_v4f64:
69- ; LA64: # %bb.0: # %entry
70- ; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
71- ; LA64-NEXT: lu52i.d $a0, $zero, -1025
72- ; LA64-NEXT: xvreplgr2vr.d $xr1, $a0
73- ; LA64-NEXT: xvfadd.d $xr0, $xr0, $xr1
74- ; LA64-NEXT: xvpermi.d $xr0, $xr0, 68
75- ; LA64-NEXT: xvrepl128vei.d $xr0, $xr0, 0
76- ; LA64-NEXT: ret
45+ ; CHECK-LABEL: fsub_splat_v4f64:
46+ ; CHECK: # %bb.0: # %entry
47+ ; CHECK-NEXT: vldi $vr1, -784
48+ ; CHECK-NEXT: fadd.d $fa0, $fa0, $fa1
49+ ; CHECK-NEXT: xvreplve0.d $xr0, $xr0
50+ ; CHECK-NEXT: ret
7751entry:
7852 %insa = insertelement <4 x double > poison, double %a , i32 0
7953 %insb = insertelement <4 x double > poison, double 1 .0 , i32 0
0 commit comments