1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s 3 4; 5; fcmp oeq 6; 7 8define <2 x i64> @fcmp_oeq_v2f64() { 9; CHECK-LABEL: fcmp_oeq_v2f64: 10; CHECK: # %bb.0: 11; CHECK-NEXT: pcmpeqd %xmm0, %xmm0 12; CHECK-NEXT: retq 13 %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> %2 16} 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, %xmm0 22; CHECK-NEXT: retq 23 %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef 24 %2 = sext <2 x i1> %1 to <2 x i64> 25 ret <2 x i64> %2 26} 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, %xmm0 32; CHECK-NEXT: retq 33 %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> %2 36} 37 38define <4 x i32> @fcmp_oeq_v4f32() { 39; CHECK-LABEL: fcmp_oeq_v4f32: 40; CHECK: # %bb.0: 41; CHECK-NEXT: pcmpeqd %xmm0, %xmm0 42; CHECK-NEXT: retq 43 %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> %2 46} 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, %xmm0 52; CHECK-NEXT: retq 53 %1 = fcmp oeq <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef 54 %2 = sext <4 x i1> %1 to <4 x i32> 55 ret <4 x i32> %2 56} 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: retq 63 %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> %2 66} 67 68; 69; fcmp ueq 70; 71 72define <2 x i64> @fcmp_ueq_v2f64() { 73; CHECK-LABEL: fcmp_ueq_v2f64: 74; CHECK: # %bb.0: 75; CHECK-NEXT: pcmpeqd %xmm0, %xmm0 76; CHECK-NEXT: retq 77 %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> %2 80} 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, %xmm0 86; CHECK-NEXT: retq 87 %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef 88 %2 = sext <2 x i1> %1 to <2 x i64> 89 ret <2 x i64> %2 90} 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: retq 97 %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> %2 100} 101 102define <4 x i32> @fcmp_ueq_v4f32() { 103; CHECK-LABEL: fcmp_ueq_v4f32: 104; CHECK: # %bb.0: 105; CHECK-NEXT: pcmpeqd %xmm0, %xmm0 106; CHECK-NEXT: retq 107 %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> %2 110} 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, %xmm0 116; CHECK-NEXT: retq 117 %1 = fcmp ueq <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef 118 %2 = sext <4 x i1> %1 to <4 x i32> 119 ret <4 x i32> %2 120} 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, %xmm0 126; CHECK-NEXT: retq 127 %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> %2 130} 131 132; 133; fcmp false 134; 135 136define <2 x i64> @fcmp_false_v2f64() { 137; CHECK-LABEL: fcmp_false_v2f64: 138; CHECK: # %bb.0: 139; CHECK-NEXT: xorps %xmm0, %xmm0 140; CHECK-NEXT: retq 141 %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> %2 144} 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, %xmm0 150; CHECK-NEXT: retq 151 %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef 152 %2 = sext <2 x i1> %1 to <2 x i64> 153 ret <2 x i64> %2 154} 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, %xmm0 160; CHECK-NEXT: retq 161 %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> %2 164} 165 166define <4 x i32> @fcmp_false_v4f32() { 167; CHECK-LABEL: fcmp_false_v4f32: 168; CHECK: # %bb.0: 169; CHECK-NEXT: xorps %xmm0, %xmm0 170; CHECK-NEXT: retq 171 %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> %2 174} 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, %xmm0 180; CHECK-NEXT: retq 181 %1 = fcmp false <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef 182 %2 = sext <4 x i1> %1 to <4 x i32> 183 ret <4 x i32> %2 184} 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, %xmm0 190; CHECK-NEXT: retq 191 %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> %2 194} 195 196; 197; fcmp true 198; 199 200define <2 x i64> @fcmp_true_v2f64() { 201; CHECK-LABEL: fcmp_true_v2f64: 202; CHECK: # %bb.0: 203; CHECK-NEXT: pcmpeqd %xmm0, %xmm0 204; CHECK-NEXT: retq 205 %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> %2 208} 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, %xmm0 214; CHECK-NEXT: retq 215 %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef 216 %2 = sext <2 x i1> %1 to <2 x i64> 217 ret <2 x i64> %2 218} 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, %xmm0 224; CHECK-NEXT: retq 225 %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> %2 228} 229 230define <4 x i32> @fcmp_true_v4f32() { 231; CHECK-LABEL: fcmp_true_v4f32: 232; CHECK: # %bb.0: 233; CHECK-NEXT: pcmpeqd %xmm0, %xmm0 234; CHECK-NEXT: retq 235 %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> %2 238} 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, %xmm0 244; CHECK-NEXT: retq 245 %1 = fcmp true <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef 246 %2 = sext <4 x i1> %1 to <4 x i32> 247 ret <4 x i32> %2 248} 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, %xmm0 254; CHECK-NEXT: retq 255 %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> %2 258} 259