1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s 2 3;;; Test floating divide intrinsic instructions 4;;; 5;;; Note: 6;;; We test VFDIV*vvl, VFDIV*vvl_v, VFDIV*rvl, VFDIV*rvl_v, VFDIV*vvml_v, and 7;;; VFDIV*rvml_v instructions. 8 9; Function Attrs: nounwind readnone 10define fastcc <256 x double> @vfdivd_vvvl(<256 x double> %0, <256 x double> %1) { 11; CHECK-LABEL: vfdivd_vvvl: 12; CHECK: # %bb.0: 13; CHECK-NEXT: lea %s0, 256 14; CHECK-NEXT: lvl %s0 15; CHECK-NEXT: vfdiv.d %v0, %v0, %v1 16; CHECK-NEXT: b.l.t (, %s10) 17 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvl(<256 x double> %0, <256 x double> %1, i32 256) 18 ret <256 x double> %3 19} 20 21; Function Attrs: nounwind readnone 22declare <256 x double> @llvm.ve.vl.vfdivd.vvvl(<256 x double>, <256 x double>, i32) 23 24; Function Attrs: nounwind readnone 25define fastcc <256 x double> @vfdivd_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) { 26; CHECK-LABEL: vfdivd_vvvvl: 27; CHECK: # %bb.0: 28; CHECK-NEXT: lea %s0, 128 29; CHECK-NEXT: lvl %s0 30; CHECK-NEXT: vfdiv.d %v2, %v0, %v1 31; CHECK-NEXT: lea %s16, 256 32; CHECK-NEXT: lvl %s16 33; CHECK-NEXT: vor %v0, (0)1, %v2 34; CHECK-NEXT: b.l.t (, %s10) 35 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128) 36 ret <256 x double> %4 37} 38 39; Function Attrs: nounwind readnone 40declare <256 x double> @llvm.ve.vl.vfdivd.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32) 41 42; Function Attrs: nounwind readnone 43define fastcc <256 x double> @vfdivd_vsvl(double %0, <256 x double> %1) { 44; CHECK-LABEL: vfdivd_vsvl: 45; CHECK: # %bb.0: 46; CHECK-NEXT: lea %s1, 256 47; CHECK-NEXT: lvl %s1 48; CHECK-NEXT: vfdiv.d %v0, %s0, %v0 49; CHECK-NEXT: b.l.t (, %s10) 50 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvl(double %0, <256 x double> %1, i32 256) 51 ret <256 x double> %3 52} 53 54; Function Attrs: nounwind readnone 55declare <256 x double> @llvm.ve.vl.vfdivd.vsvl(double, <256 x double>, i32) 56 57; Function Attrs: nounwind readnone 58define fastcc <256 x double> @vfdivd_vsvvl(double %0, <256 x double> %1, <256 x double> %2) { 59; CHECK-LABEL: vfdivd_vsvvl: 60; CHECK: # %bb.0: 61; CHECK-NEXT: lea %s1, 128 62; CHECK-NEXT: lvl %s1 63; CHECK-NEXT: vfdiv.d %v1, %s0, %v0 64; CHECK-NEXT: lea %s16, 256 65; CHECK-NEXT: lvl %s16 66; CHECK-NEXT: vor %v0, (0)1, %v1 67; CHECK-NEXT: b.l.t (, %s10) 68 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvvl(double %0, <256 x double> %1, <256 x double> %2, i32 128) 69 ret <256 x double> %4 70} 71 72; Function Attrs: nounwind readnone 73declare <256 x double> @llvm.ve.vl.vfdivd.vsvvl(double, <256 x double>, <256 x double>, i32) 74 75; Function Attrs: nounwind readnone 76define fastcc <256 x double> @vfdivd_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) { 77; CHECK-LABEL: vfdivd_vvvmvl: 78; CHECK: # %bb.0: 79; CHECK-NEXT: lea %s0, 128 80; CHECK-NEXT: lvl %s0 81; CHECK-NEXT: vfdiv.d %v2, %v0, %v1, %vm1 82; CHECK-NEXT: lea %s16, 256 83; CHECK-NEXT: lvl %s16 84; CHECK-NEXT: vor %v0, (0)1, %v2 85; CHECK-NEXT: b.l.t (, %s10) 86 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128) 87 ret <256 x double> %5 88} 89 90; Function Attrs: nounwind readnone 91declare <256 x double> @llvm.ve.vl.vfdivd.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32) 92 93; Function Attrs: nounwind readnone 94define fastcc <256 x double> @vfdivd_vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) { 95; CHECK-LABEL: vfdivd_vsvmvl: 96; CHECK: # %bb.0: 97; CHECK-NEXT: lea %s1, 128 98; CHECK-NEXT: lvl %s1 99; CHECK-NEXT: vfdiv.d %v1, %s0, %v0, %vm1 100; CHECK-NEXT: lea %s16, 256 101; CHECK-NEXT: lvl %s16 102; CHECK-NEXT: vor %v0, (0)1, %v1 103; CHECK-NEXT: b.l.t (, %s10) 104 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128) 105 ret <256 x double> %5 106} 107 108; Function Attrs: nounwind readnone 109declare <256 x double> @llvm.ve.vl.vfdivd.vsvmvl(double, <256 x double>, <256 x i1>, <256 x double>, i32) 110 111; Function Attrs: nounwind readnone 112define fastcc <256 x double> @vfdivs_vvvl(<256 x double> %0, <256 x double> %1) { 113; CHECK-LABEL: vfdivs_vvvl: 114; CHECK: # %bb.0: 115; CHECK-NEXT: lea %s0, 256 116; CHECK-NEXT: lvl %s0 117; CHECK-NEXT: vfdiv.s %v0, %v0, %v1 118; CHECK-NEXT: b.l.t (, %s10) 119 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvl(<256 x double> %0, <256 x double> %1, i32 256) 120 ret <256 x double> %3 121} 122 123; Function Attrs: nounwind readnone 124declare <256 x double> @llvm.ve.vl.vfdivs.vvvl(<256 x double>, <256 x double>, i32) 125 126; Function Attrs: nounwind readnone 127define fastcc <256 x double> @vfdivs_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) { 128; CHECK-LABEL: vfdivs_vvvvl: 129; CHECK: # %bb.0: 130; CHECK-NEXT: lea %s0, 128 131; CHECK-NEXT: lvl %s0 132; CHECK-NEXT: vfdiv.s %v2, %v0, %v1 133; CHECK-NEXT: lea %s16, 256 134; CHECK-NEXT: lvl %s16 135; CHECK-NEXT: vor %v0, (0)1, %v2 136; CHECK-NEXT: b.l.t (, %s10) 137 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128) 138 ret <256 x double> %4 139} 140 141; Function Attrs: nounwind readnone 142declare <256 x double> @llvm.ve.vl.vfdivs.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32) 143 144; Function Attrs: nounwind readnone 145define fastcc <256 x double> @vfdivs_vsvl(float %0, <256 x double> %1) { 146; CHECK-LABEL: vfdivs_vsvl: 147; CHECK: # %bb.0: 148; CHECK-NEXT: lea %s1, 256 149; CHECK-NEXT: lvl %s1 150; CHECK-NEXT: vfdiv.s %v0, %s0, %v0 151; CHECK-NEXT: b.l.t (, %s10) 152 %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvl(float %0, <256 x double> %1, i32 256) 153 ret <256 x double> %3 154} 155 156; Function Attrs: nounwind readnone 157declare <256 x double> @llvm.ve.vl.vfdivs.vsvl(float, <256 x double>, i32) 158 159; Function Attrs: nounwind readnone 160define fastcc <256 x double> @vfdivs_vsvvl(float %0, <256 x double> %1, <256 x double> %2) { 161; CHECK-LABEL: vfdivs_vsvvl: 162; CHECK: # %bb.0: 163; CHECK-NEXT: lea %s1, 128 164; CHECK-NEXT: lvl %s1 165; CHECK-NEXT: vfdiv.s %v1, %s0, %v0 166; CHECK-NEXT: lea %s16, 256 167; CHECK-NEXT: lvl %s16 168; CHECK-NEXT: vor %v0, (0)1, %v1 169; CHECK-NEXT: b.l.t (, %s10) 170 %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvvl(float %0, <256 x double> %1, <256 x double> %2, i32 128) 171 ret <256 x double> %4 172} 173 174; Function Attrs: nounwind readnone 175declare <256 x double> @llvm.ve.vl.vfdivs.vsvvl(float, <256 x double>, <256 x double>, i32) 176 177; Function Attrs: nounwind readnone 178define fastcc <256 x double> @vfdivs_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) { 179; CHECK-LABEL: vfdivs_vvvmvl: 180; CHECK: # %bb.0: 181; CHECK-NEXT: lea %s0, 128 182; CHECK-NEXT: lvl %s0 183; CHECK-NEXT: vfdiv.s %v2, %v0, %v1, %vm1 184; CHECK-NEXT: lea %s16, 256 185; CHECK-NEXT: lvl %s16 186; CHECK-NEXT: vor %v0, (0)1, %v2 187; CHECK-NEXT: b.l.t (, %s10) 188 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128) 189 ret <256 x double> %5 190} 191 192; Function Attrs: nounwind readnone 193declare <256 x double> @llvm.ve.vl.vfdivs.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32) 194 195; Function Attrs: nounwind readnone 196define fastcc <256 x double> @vfdivs_vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) { 197; CHECK-LABEL: vfdivs_vsvmvl: 198; CHECK: # %bb.0: 199; CHECK-NEXT: lea %s1, 128 200; CHECK-NEXT: lvl %s1 201; CHECK-NEXT: vfdiv.s %v1, %s0, %v0, %vm1 202; CHECK-NEXT: lea %s16, 256 203; CHECK-NEXT: lvl %s16 204; CHECK-NEXT: vor %v0, (0)1, %v1 205; CHECK-NEXT: b.l.t (, %s10) 206 %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128) 207 ret <256 x double> %5 208} 209 210; Function Attrs: nounwind readnone 211declare <256 x double> @llvm.ve.vl.vfdivs.vsvmvl(float, <256 x double>, <256 x i1>, <256 x double>, i32) 212