259 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s3 4;5; fcmp oeq6;7 8define <2 x i64> @fcmp_oeq_v2f64() {9; CHECK-LABEL: fcmp_oeq_v2f64:10; CHECK: # %bb.0:11; CHECK-NEXT: pcmpeqd %xmm0, %xmm012; CHECK-NEXT: retq13 %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>14 %2 = sext <2 x i1> %1 to <2 x i64>15 ret <2 x i64> %216}17 18define <2 x i64> @fcmp_oeq_v2f64_undef() {19; CHECK-LABEL: fcmp_oeq_v2f64_undef:20; CHECK: # %bb.0:21; CHECK-NEXT: xorps %xmm0, %xmm022; CHECK-NEXT: retq23 %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef24 %2 = sext <2 x i1> %1 to <2 x i64>25 ret <2 x i64> %226}27 28define <2 x i64> @fcmp_oeq_v2f64_undef_elt() {29; CHECK-LABEL: fcmp_oeq_v2f64_undef_elt:30; CHECK: # %bb.0:31; CHECK-NEXT: xorps %xmm0, %xmm032; CHECK-NEXT: retq33 %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>34 %2 = sext <2 x i1> %1 to <2 x i64>35 ret <2 x i64> %236}37 38define <4 x i32> @fcmp_oeq_v4f32() {39; CHECK-LABEL: fcmp_oeq_v4f32:40; CHECK: # %bb.0:41; CHECK-NEXT: pcmpeqd %xmm0, %xmm042; CHECK-NEXT: retq43 %1 = fcmp oeq <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>44 %2 = sext <4 x i1> %1 to <4 x i32>45 ret <4 x i32> %246}47 48define <4 x i32> @fcmp_oeq_v4f32_undef() {49; CHECK-LABEL: fcmp_oeq_v4f32_undef:50; CHECK: # %bb.0:51; CHECK-NEXT: xorps %xmm0, %xmm052; CHECK-NEXT: retq53 %1 = fcmp oeq <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef54 %2 = sext <4 x i1> %1 to <4 x i32>55 ret <4 x i32> %256}57 58define <4 x i32> @fcmp_oeq_v4f32_undef_elt() {59; CHECK-LABEL: fcmp_oeq_v4f32_undef_elt:60; CHECK: # %bb.0:61; CHECK-NEXT: movaps {{.*#+}} xmm0 = [0,4294967295,4294967295,0]62; CHECK-NEXT: retq63 %1 = fcmp oeq <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>64 %2 = sext <4 x i1> %1 to <4 x i32>65 ret <4 x i32> %266}67 68;69; fcmp ueq70;71 72define <2 x i64> @fcmp_ueq_v2f64() {73; CHECK-LABEL: fcmp_ueq_v2f64:74; CHECK: # %bb.0:75; CHECK-NEXT: pcmpeqd %xmm0, %xmm076; CHECK-NEXT: retq77 %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>78 %2 = sext <2 x i1> %1 to <2 x i64>79 ret <2 x i64> %280}81 82define <2 x i64> @fcmp_ueq_v2f64_undef() {83; CHECK-LABEL: fcmp_ueq_v2f64_undef:84; CHECK: # %bb.0:85; CHECK-NEXT: pcmpeqd %xmm0, %xmm086; CHECK-NEXT: retq87 %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef88 %2 = sext <2 x i1> %1 to <2 x i64>89 ret <2 x i64> %290}91 92define <2 x i64> @fcmp_ueq_v2f64_undef_elt() {93; CHECK-LABEL: fcmp_ueq_v2f64_undef_elt:94; CHECK: # %bb.0:95; CHECK-NEXT: movsd {{.*#+}} xmm0 = [18446744073709551615,0]96; CHECK-NEXT: retq97 %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>98 %2 = sext <2 x i1> %1 to <2 x i64>99 ret <2 x i64> %2100}101 102define <4 x i32> @fcmp_ueq_v4f32() {103; CHECK-LABEL: fcmp_ueq_v4f32:104; CHECK: # %bb.0:105; CHECK-NEXT: pcmpeqd %xmm0, %xmm0106; CHECK-NEXT: retq107 %1 = fcmp ueq <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>108 %2 = sext <4 x i1> %1 to <4 x i32>109 ret <4 x i32> %2110}111 112define <4 x i32> @fcmp_ueq_v4f32_undef() {113; CHECK-LABEL: fcmp_ueq_v4f32_undef:114; CHECK: # %bb.0:115; CHECK-NEXT: pcmpeqd %xmm0, %xmm0116; CHECK-NEXT: retq117 %1 = fcmp ueq <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef118 %2 = sext <4 x i1> %1 to <4 x i32>119 ret <4 x i32> %2120}121 122define <4 x i32> @fcmp_ueq_v4f32_undef_elt() {123; CHECK-LABEL: fcmp_ueq_v4f32_undef_elt:124; CHECK: # %bb.0:125; CHECK-NEXT: pcmpeqd %xmm0, %xmm0126; CHECK-NEXT: retq127 %1 = fcmp ueq <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>128 %2 = sext <4 x i1> %1 to <4 x i32>129 ret <4 x i32> %2130}131 132;133; fcmp false134;135 136define <2 x i64> @fcmp_false_v2f64() {137; CHECK-LABEL: fcmp_false_v2f64:138; CHECK: # %bb.0:139; CHECK-NEXT: xorps %xmm0, %xmm0140; CHECK-NEXT: retq141 %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>142 %2 = sext <2 x i1> %1 to <2 x i64>143 ret <2 x i64> %2144}145 146define <2 x i64> @fcmp_false_v2f64_undef() {147; CHECK-LABEL: fcmp_false_v2f64_undef:148; CHECK: # %bb.0:149; CHECK-NEXT: xorps %xmm0, %xmm0150; CHECK-NEXT: retq151 %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef152 %2 = sext <2 x i1> %1 to <2 x i64>153 ret <2 x i64> %2154}155 156define <2 x i64> @fcmp_false_v2f64_undef_elt() {157; CHECK-LABEL: fcmp_false_v2f64_undef_elt:158; CHECK: # %bb.0:159; CHECK-NEXT: xorps %xmm0, %xmm0160; CHECK-NEXT: retq161 %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>162 %2 = sext <2 x i1> %1 to <2 x i64>163 ret <2 x i64> %2164}165 166define <4 x i32> @fcmp_false_v4f32() {167; CHECK-LABEL: fcmp_false_v4f32:168; CHECK: # %bb.0:169; CHECK-NEXT: xorps %xmm0, %xmm0170; CHECK-NEXT: retq171 %1 = fcmp false <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>172 %2 = sext <4 x i1> %1 to <4 x i32>173 ret <4 x i32> %2174}175 176define <4 x i32> @fcmp_false_v4f32_undef() {177; CHECK-LABEL: fcmp_false_v4f32_undef:178; CHECK: # %bb.0:179; CHECK-NEXT: xorps %xmm0, %xmm0180; CHECK-NEXT: retq181 %1 = fcmp false <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef182 %2 = sext <4 x i1> %1 to <4 x i32>183 ret <4 x i32> %2184}185 186define <4 x i32> @fcmp_false_v4f32_undef_elt() {187; CHECK-LABEL: fcmp_false_v4f32_undef_elt:188; CHECK: # %bb.0:189; CHECK-NEXT: xorps %xmm0, %xmm0190; CHECK-NEXT: retq191 %1 = fcmp false <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>192 %2 = sext <4 x i1> %1 to <4 x i32>193 ret <4 x i32> %2194}195 196;197; fcmp true198;199 200define <2 x i64> @fcmp_true_v2f64() {201; CHECK-LABEL: fcmp_true_v2f64:202; CHECK: # %bb.0:203; CHECK-NEXT: pcmpeqd %xmm0, %xmm0204; CHECK-NEXT: retq205 %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>206 %2 = sext <2 x i1> %1 to <2 x i64>207 ret <2 x i64> %2208}209 210define <2 x i64> @fcmp_true_v2f64_undef() {211; CHECK-LABEL: fcmp_true_v2f64_undef:212; CHECK: # %bb.0:213; CHECK-NEXT: pcmpeqd %xmm0, %xmm0214; CHECK-NEXT: retq215 %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef216 %2 = sext <2 x i1> %1 to <2 x i64>217 ret <2 x i64> %2218}219 220define <2 x i64> @fcmp_true_v2f64_undef_elt() {221; CHECK-LABEL: fcmp_true_v2f64_undef_elt:222; CHECK: # %bb.0:223; CHECK-NEXT: pcmpeqd %xmm0, %xmm0224; CHECK-NEXT: retq225 %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>226 %2 = sext <2 x i1> %1 to <2 x i64>227 ret <2 x i64> %2228}229 230define <4 x i32> @fcmp_true_v4f32() {231; CHECK-LABEL: fcmp_true_v4f32:232; CHECK: # %bb.0:233; CHECK-NEXT: pcmpeqd %xmm0, %xmm0234; CHECK-NEXT: retq235 %1 = fcmp true <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>236 %2 = sext <4 x i1> %1 to <4 x i32>237 ret <4 x i32> %2238}239 240define <4 x i32> @fcmp_true_v4f32_undef() {241; CHECK-LABEL: fcmp_true_v4f32_undef:242; CHECK: # %bb.0:243; CHECK-NEXT: pcmpeqd %xmm0, %xmm0244; CHECK-NEXT: retq245 %1 = fcmp true <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef246 %2 = sext <4 x i1> %1 to <4 x i32>247 ret <4 x i32> %2248}249 250define <4 x i32> @fcmp_true_v4f32_undef_elt() {251; CHECK-LABEL: fcmp_true_v4f32_undef_elt:252; CHECK: # %bb.0:253; CHECK-NEXT: pcmpeqd %xmm0, %xmm0254; CHECK-NEXT: retq255 %1 = fcmp true <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>256 %2 = sext <4 x i1> %1 to <4 x i32>257 ret <4 x i32> %2258}259