1; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu \ 2; RUN: -mattr=+altivec -mattr=+vsx | FileCheck %s 3; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu \ 4; RUN: -mattr=+altivec -mattr=-vsx | FileCheck %s \ 5; RUN: -check-prefix=CHECK-NOVSX 6 7define <4 x float> @test_float(<4 x float> %aa) #0 { 8 9; CHECK-LABEL: test_float 10; CHECK-NOVSX-LABEL: test_float 11; CHECK-NOVSX-LABEL: test_float 12 13 entry: 14 %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %aa) #2 15 ret <4 x float> %0 16} 17; Function Attrs: nounwind readnone 18declare <4 x float> @llvm.fabs.v4f32(<4 x float>) #1 19 20; CHECK: xvabssp 21; CHECK: blr 22; CHECK-NOVSX: vspltisb 23; CHECK-NOVSX: vslw 24; CHECK-NOVSX: vandc 25; CHECK-NOVSX: blr 26 27define <4 x float> @test2_float(<4 x float> %aa) #0 { 28 29; CHECK-LABEL: test2_float 30; CHECK-NOVSX-LABEL: test2_float 31 32 entry: 33 %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %aa) #2 34 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, 35 float -0.000000e+00, float -0.000000e+00>, %0 36 ret <4 x float> %sub 37} 38 39; CHECK: xvnabssp 40; CHECK: blr 41; CHECK-NOVSX: vspltisb 42; CHECK-NOVSX: vslw 43; CHECK-NOVSX: vor 44; CHECK-NOVSX: blr 45 46define <2 x double> @test_double(<2 x double> %aa) #0 { 47 48; CHECK-LABEL: test_double 49; CHECK-NOVSX-LABEL: test_double 50 51 entry: 52 %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %aa) #2 53 ret <2 x double> %0 54} 55 56; Function Attrs: nounwind readnone 57declare <2 x double> @llvm.fabs.v2f64(<2 x double>) #1 58 59; CHECK: xvabsdp 60; CHECK: blr 61; CHECK-NOVSX: fabs 62; CHECK-NOVSX: fabs 63; CHECK-NOVSX: blr 64 65define <2 x double> @foo(<2 x double> %aa) #0 { 66 entry: 67 %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %aa) #2 68 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %0 69 ret <2 x double> %sub 70} 71 72; CHECK: xvnabsdp 73; CHECK: blr 74; CHECK-NOVSX: fnabs 75; CHECK-NOVSX: fnabs 76; CHECK-NOVSX: blr 77