| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr \ |
| ; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix-xcoff < %s | \ |
| ; RUN: FileCheck %s --check-prefix=AIX-P8-64 |
| ; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr \ |
| ; RUN: -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix-xcoff < %s | \ |
| ; RUN: FileCheck %s --check-prefix=AIX-P8-32 |
| ; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr \ |
| ; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix-xcoff < %s | \ |
| ; RUN: FileCheck %s --check-prefix=AIX-P9-64 |
| ; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr \ |
| ; RUN: -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix-xcoff < %s | \ |
| ; RUN: FileCheck %s --check-prefix=AIX-P9-32 |
| |
| %d8 = type <8 x double> |
| %f1 = type <1 x float> |
| %f2 = type <2 x float> |
| %f4 = type <4 x float> |
| %f8 = type <8 x float> |
| %i4 = type <4 x i32> |
| |
| define void @test_f2(%f2* %P, %f2* %Q, %f2* %S) { |
| ; AIX-P8-64-LABEL: test_f2: |
| ; AIX-P8-64: # %bb.0: |
| ; AIX-P8-64-NEXT: lfdx f0, 0, r3 |
| ; AIX-P8-64-NEXT: lfdx f1, 0, r4 |
| ; AIX-P8-64-NEXT: xvaddsp vs0, vs0, vs1 |
| ; AIX-P8-64-NEXT: stfdx f0, 0, r5 |
| ; AIX-P8-64-NEXT: blr |
| ; |
| ; AIX-P8-32-LABEL: test_f2: |
| ; AIX-P8-32: # %bb.0: |
| ; AIX-P8-32-NEXT: li r6, 4 |
| ; AIX-P8-32-NEXT: lxsiwzx v3, 0, r3 |
| ; AIX-P8-32-NEXT: lxsiwzx v5, 0, r4 |
| ; AIX-P8-32-NEXT: lxsiwzx v2, r3, r6 |
| ; AIX-P8-32-NEXT: lxsiwzx v4, r4, r6 |
| ; AIX-P8-32-NEXT: vmrgow v2, v3, v2 |
| ; AIX-P8-32-NEXT: vmrgow v3, v5, v4 |
| ; AIX-P8-32-NEXT: xvaddsp vs0, v2, v3 |
| ; AIX-P8-32-NEXT: xxsldwi vs1, vs0, vs0, 1 |
| ; AIX-P8-32-NEXT: xscvspdpn f0, vs0 |
| ; AIX-P8-32-NEXT: xscvspdpn f1, vs1 |
| ; AIX-P8-32-NEXT: stfs f0, 0(r5) |
| ; AIX-P8-32-NEXT: stfs f1, 4(r5) |
| ; AIX-P8-32-NEXT: blr |
| ; |
| ; AIX-P9-64-LABEL: test_f2: |
| ; AIX-P9-64: # %bb.0: |
| ; AIX-P9-64-NEXT: lfd f0, 0(r3) |
| ; AIX-P9-64-NEXT: lfd f1, 0(r4) |
| ; AIX-P9-64-NEXT: xvaddsp vs0, vs0, vs1 |
| ; AIX-P9-64-NEXT: stfd f0, 0(r5) |
| ; AIX-P9-64-NEXT: blr |
| ; |
| ; AIX-P9-32-LABEL: test_f2: |
| ; AIX-P9-32: # %bb.0: |
| ; AIX-P9-32-NEXT: li r6, 4 |
| ; AIX-P9-32-NEXT: lxsiwzx v3, 0, r3 |
| ; AIX-P9-32-NEXT: lxsiwzx v4, 0, r4 |
| ; AIX-P9-32-NEXT: lxsiwzx v2, r3, r6 |
| ; AIX-P9-32-NEXT: vmrgow v2, v3, v2 |
| ; AIX-P9-32-NEXT: lxsiwzx v3, r4, r6 |
| ; AIX-P9-32-NEXT: vmrgow v3, v4, v3 |
| ; AIX-P9-32-NEXT: xvaddsp vs0, v2, v3 |
| ; AIX-P9-32-NEXT: xscvspdpn f1, vs0 |
| ; AIX-P9-32-NEXT: xxsldwi vs0, vs0, vs0, 1 |
| ; AIX-P9-32-NEXT: xscvspdpn f0, vs0 |
| ; AIX-P9-32-NEXT: stfs f1, 0(r5) |
| ; AIX-P9-32-NEXT: stfs f0, 4(r5) |
| ; AIX-P9-32-NEXT: blr |
| %p = load %f2, %f2* %P |
| %q = load %f2, %f2* %Q |
| %R = fadd %f2 %p, %q |
| store %f2 %R, %f2* %S |
| ret void |
| } |
| |