Skip to content

Commit 3b0856e

Browse files
committed
[X86] canCreateUndefOrPoisonForTargetNode - SSE logic ops can't create poison/undef
1 parent 3c4a91c commit 3b0856e

12 files changed

+287
-289
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45132,6 +45132,13 @@ bool X86TargetLowering::canCreateUndefOrPoisonForTargetNode(
4513245132
bool PoisonOnly, bool ConsiderFlags, unsigned Depth) const {
4513345133

4513445134
switch (Op.getOpcode()) {
45135+
// Logic ops.
45136+
case X86ISD::ANDNP:
45137+
case X86ISD::FAND:
45138+
case X86ISD::FOR:
45139+
case X86ISD::FXOR:
45140+
case X86ISD::FANDN:
45141+
return false;
4513545142
// SSE vector insert/extracts use modulo indices.
4513645143
case X86ISD::PINSRB:
4513745144
case X86ISD::PINSRW:

llvm/test/CodeGen/X86/pr120906.ll

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ define i32 @PR120906(ptr %p) {
1111
; CHECK-NEXT: pxor %xmm2, %xmm2
1212
; CHECK-NEXT: pcmpgtb %xmm1, %xmm2
1313
; CHECK-NEXT: movdqa {{.*#+}} xmm3 = [11,11,11,11,u,u,u,u,u,u,u,u,u,u,u,u]
14-
; CHECK-NEXT: movdqa %xmm3, %xmm4
15-
; CHECK-NEXT: psllw $2, %xmm4
16-
; CHECK-NEXT: movdqa {{.*#+}} xmm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
17-
; CHECK-NEXT: pand %xmm2, %xmm5
18-
; CHECK-NEXT: pand %xmm4, %xmm5
19-
; CHECK-NEXT: pandn %xmm3, %xmm2
20-
; CHECK-NEXT: por %xmm5, %xmm2
14+
; CHECK-NEXT: movdqa %xmm2, %xmm4
15+
; CHECK-NEXT: pandn %xmm3, %xmm4
16+
; CHECK-NEXT: movdqa %xmm3, %xmm5
17+
; CHECK-NEXT: psllw $2, %xmm5
18+
; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
19+
; CHECK-NEXT: pand %xmm5, %xmm2
20+
; CHECK-NEXT: por %xmm4, %xmm2
2121
; CHECK-NEXT: paddb %xmm1, %xmm1
2222
; CHECK-NEXT: pxor %xmm4, %xmm4
2323
; CHECK-NEXT: pcmpgtb %xmm1, %xmm4

llvm/test/CodeGen/X86/sshl_sat_vec.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -508,11 +508,11 @@ define <16 x i8> @vec_v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {
508508
; X64-NEXT: paddb %xmm1, %xmm1
509509
; X64-NEXT: pxor %xmm3, %xmm3
510510
; X64-NEXT: pcmpgtb %xmm1, %xmm3
511-
; X64-NEXT: movdqa {{.*#+}} xmm7 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
512-
; X64-NEXT: pand %xmm3, %xmm7
513-
; X64-NEXT: pandn %xmm4, %xmm3
511+
; X64-NEXT: movdqa %xmm3, %xmm7
512+
; X64-NEXT: pandn %xmm4, %xmm7
514513
; X64-NEXT: psllw $2, %xmm4
515-
; X64-NEXT: pand %xmm4, %xmm7
514+
; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
515+
; X64-NEXT: pand %xmm4, %xmm3
516516
; X64-NEXT: por %xmm7, %xmm3
517517
; X64-NEXT: paddb %xmm1, %xmm1
518518
; X64-NEXT: pxor %xmm4, %xmm4

llvm/test/CodeGen/X86/ushl_sat_vec.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,12 @@ define <16 x i8> @vec_v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {
415415
; X64-NEXT: paddb %xmm1, %xmm1
416416
; X64-NEXT: pxor %xmm5, %xmm5
417417
; X64-NEXT: pcmpgtb %xmm1, %xmm5
418-
; X64-NEXT: movdqa %xmm5, %xmm3
419-
; X64-NEXT: pandn %xmm6, %xmm3
418+
; X64-NEXT: movdqa %xmm5, %xmm7
419+
; X64-NEXT: pandn %xmm6, %xmm7
420420
; X64-NEXT: psllw $2, %xmm6
421-
; X64-NEXT: movdqa {{.*#+}} xmm7 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
422-
; X64-NEXT: pand %xmm5, %xmm7
423-
; X64-NEXT: pand %xmm6, %xmm7
421+
; X64-NEXT: movdqa {{.*#+}} xmm3 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
422+
; X64-NEXT: pand %xmm5, %xmm3
423+
; X64-NEXT: pand %xmm6, %xmm3
424424
; X64-NEXT: por %xmm7, %xmm3
425425
; X64-NEXT: paddb %xmm1, %xmm1
426426
; X64-NEXT: pcmpgtb %xmm1, %xmm2

llvm/test/CodeGen/X86/vector-fshl-rot-256.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -377,12 +377,12 @@ define <32 x i8> @var_funnnel_v32i8(<32 x i8> %x, <32 x i8> %amt) nounwind {
377377
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
378378
; AVX1-NEXT: vpsllw $5, %xmm5, %xmm5
379379
; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
380-
; AVX1-NEXT: vpsllw $2, %xmm2, %xmm3
380+
; AVX1-NEXT: vpsrlw $6, %xmm2, %xmm3
381381
; AVX1-NEXT: vbroadcastss {{.*#+}} xmm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
382-
; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
383-
; AVX1-NEXT: vpsrlw $6, %xmm2, %xmm7
384-
; AVX1-NEXT: vpandn %xmm7, %xmm6, %xmm7
385-
; AVX1-NEXT: vpor %xmm7, %xmm3, %xmm3
382+
; AVX1-NEXT: vpandn %xmm3, %xmm6, %xmm3
383+
; AVX1-NEXT: vpsllw $2, %xmm2, %xmm7
384+
; AVX1-NEXT: vpand %xmm6, %xmm7, %xmm7
385+
; AVX1-NEXT: vpor %xmm3, %xmm7, %xmm3
386386
; AVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5
387387
; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
388388
; AVX1-NEXT: vpsrlw $7, %xmm2, %xmm3
@@ -399,11 +399,11 @@ define <32 x i8> @var_funnnel_v32i8(<32 x i8> %x, <32 x i8> %amt) nounwind {
399399
; AVX1-NEXT: vpor %xmm3, %xmm4, %xmm3
400400
; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1
401401
; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
402-
; AVX1-NEXT: vpsllw $2, %xmm0, %xmm3
403-
; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
404-
; AVX1-NEXT: vpsrlw $6, %xmm0, %xmm4
405-
; AVX1-NEXT: vpandn %xmm4, %xmm6, %xmm4
406-
; AVX1-NEXT: vpor %xmm4, %xmm3, %xmm3
402+
; AVX1-NEXT: vpsrlw $6, %xmm0, %xmm3
403+
; AVX1-NEXT: vpandn %xmm3, %xmm6, %xmm3
404+
; AVX1-NEXT: vpsllw $2, %xmm0, %xmm4
405+
; AVX1-NEXT: vpand %xmm6, %xmm4, %xmm4
406+
; AVX1-NEXT: vpor %xmm3, %xmm4, %xmm3
407407
; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1
408408
; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
409409
; AVX1-NEXT: vpsrlw $7, %xmm0, %xmm3

llvm/test/CodeGen/X86/vector-fshr-128.ll

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -775,21 +775,20 @@ define <16 x i8> @var_funnnel_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %amt)
775775
; SSE2-NEXT: paddb %xmm2, %xmm2
776776
; SSE2-NEXT: pxor %xmm1, %xmm1
777777
; SSE2-NEXT: pcmpgtb %xmm2, %xmm1
778-
; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
779-
; SSE2-NEXT: pand %xmm1, %xmm5
780-
; SSE2-NEXT: pandn %xmm0, %xmm1
778+
; SSE2-NEXT: movdqa %xmm1, %xmm5
779+
; SSE2-NEXT: pandn %xmm0, %xmm5
781780
; SSE2-NEXT: psllw $2, %xmm0
782-
; SSE2-NEXT: pand %xmm0, %xmm5
783-
; SSE2-NEXT: por %xmm5, %xmm1
781+
; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
782+
; SSE2-NEXT: pand %xmm1, %xmm0
783+
; SSE2-NEXT: por %xmm5, %xmm0
784784
; SSE2-NEXT: paddb %xmm2, %xmm2
785785
; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
786-
; SSE2-NEXT: movdqa %xmm4, %xmm0
787-
; SSE2-NEXT: pandn %xmm1, %xmm0
788-
; SSE2-NEXT: paddb %xmm1, %xmm1
789-
; SSE2-NEXT: pand %xmm4, %xmm1
790-
; SSE2-NEXT: por %xmm0, %xmm1
791-
; SSE2-NEXT: por %xmm3, %xmm1
792-
; SSE2-NEXT: movdqa %xmm1, %xmm0
786+
; SSE2-NEXT: movdqa %xmm4, %xmm1
787+
; SSE2-NEXT: pandn %xmm0, %xmm1
788+
; SSE2-NEXT: paddb %xmm0, %xmm0
789+
; SSE2-NEXT: pand %xmm4, %xmm0
790+
; SSE2-NEXT: por %xmm1, %xmm0
791+
; SSE2-NEXT: por %xmm3, %xmm0
793792
; SSE2-NEXT: retq
794793
;
795794
; SSE41-LABEL: var_funnnel_v16i8:
@@ -1065,21 +1064,20 @@ define <16 x i8> @var_funnnel_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %amt)
10651064
; X86-SSE2-NEXT: paddb %xmm2, %xmm2
10661065
; X86-SSE2-NEXT: pxor %xmm1, %xmm1
10671066
; X86-SSE2-NEXT: pcmpgtb %xmm2, %xmm1
1068-
; X86-SSE2-NEXT: movdqa {{.*#+}} xmm5 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
1069-
; X86-SSE2-NEXT: pand %xmm1, %xmm5
1070-
; X86-SSE2-NEXT: pandn %xmm0, %xmm1
1067+
; X86-SSE2-NEXT: movdqa %xmm1, %xmm5
1068+
; X86-SSE2-NEXT: pandn %xmm0, %xmm5
10711069
; X86-SSE2-NEXT: psllw $2, %xmm0
1072-
; X86-SSE2-NEXT: pand %xmm0, %xmm5
1073-
; X86-SSE2-NEXT: por %xmm5, %xmm1
1070+
; X86-SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1
1071+
; X86-SSE2-NEXT: pand %xmm1, %xmm0
1072+
; X86-SSE2-NEXT: por %xmm5, %xmm0
10741073
; X86-SSE2-NEXT: paddb %xmm2, %xmm2
10751074
; X86-SSE2-NEXT: pcmpgtb %xmm2, %xmm4
1076-
; X86-SSE2-NEXT: movdqa %xmm4, %xmm0
1077-
; X86-SSE2-NEXT: pandn %xmm1, %xmm0
1078-
; X86-SSE2-NEXT: paddb %xmm1, %xmm1
1079-
; X86-SSE2-NEXT: pand %xmm4, %xmm1
1080-
; X86-SSE2-NEXT: por %xmm0, %xmm1
1081-
; X86-SSE2-NEXT: por %xmm3, %xmm1
1082-
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
1075+
; X86-SSE2-NEXT: movdqa %xmm4, %xmm1
1076+
; X86-SSE2-NEXT: pandn %xmm0, %xmm1
1077+
; X86-SSE2-NEXT: paddb %xmm0, %xmm0
1078+
; X86-SSE2-NEXT: pand %xmm4, %xmm0
1079+
; X86-SSE2-NEXT: por %xmm1, %xmm0
1080+
; X86-SSE2-NEXT: por %xmm3, %xmm0
10831081
; X86-SSE2-NEXT: retl
10841082
%res = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %amt)
10851083
ret <16 x i8> %res

llvm/test/CodeGen/X86/vector-fshr-rot-256.ll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -400,11 +400,11 @@ define <32 x i8> @var_funnnel_v32i8(<32 x i8> %x, <32 x i8> %amt) nounwind {
400400
; AVX1-NEXT: vpsubb %xmm5, %xmm6, %xmm5
401401
; AVX1-NEXT: vpsllw $5, %xmm5, %xmm5
402402
; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
403-
; AVX1-NEXT: vpsllw $2, %xmm2, %xmm3
403+
; AVX1-NEXT: vpsrlw $6, %xmm2, %xmm3
404404
; AVX1-NEXT: vbroadcastss {{.*#+}} xmm7 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
405-
; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3
406-
; AVX1-NEXT: vpsrlw $6, %xmm2, %xmm8
407-
; AVX1-NEXT: vpandn %xmm8, %xmm7, %xmm8
405+
; AVX1-NEXT: vpandn %xmm3, %xmm7, %xmm3
406+
; AVX1-NEXT: vpsllw $2, %xmm2, %xmm8
407+
; AVX1-NEXT: vpand %xmm7, %xmm8, %xmm8
408408
; AVX1-NEXT: vpor %xmm3, %xmm8, %xmm3
409409
; AVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5
410410
; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
@@ -423,11 +423,11 @@ define <32 x i8> @var_funnnel_v32i8(<32 x i8> %x, <32 x i8> %amt) nounwind {
423423
; AVX1-NEXT: vpsubb %xmm1, %xmm6, %xmm1
424424
; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1
425425
; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
426-
; AVX1-NEXT: vpsllw $2, %xmm0, %xmm3
427-
; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3
428-
; AVX1-NEXT: vpsrlw $6, %xmm0, %xmm4
429-
; AVX1-NEXT: vpandn %xmm4, %xmm7, %xmm4
430-
; AVX1-NEXT: vpor %xmm4, %xmm3, %xmm3
426+
; AVX1-NEXT: vpsrlw $6, %xmm0, %xmm3
427+
; AVX1-NEXT: vpandn %xmm3, %xmm7, %xmm3
428+
; AVX1-NEXT: vpsllw $2, %xmm0, %xmm4
429+
; AVX1-NEXT: vpand %xmm7, %xmm4, %xmm4
430+
; AVX1-NEXT: vpor %xmm3, %xmm4, %xmm3
431431
; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1
432432
; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
433433
; AVX1-NEXT: vpsrlw $7, %xmm0, %xmm3

llvm/test/CodeGen/X86/vector-rotate-256.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -321,12 +321,12 @@ define <32 x i8> @var_rotate_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
321321
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
322322
; AVX1-NEXT: vpsllw $5, %xmm5, %xmm5
323323
; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
324-
; AVX1-NEXT: vpsllw $2, %xmm2, %xmm3
324+
; AVX1-NEXT: vpsrlw $6, %xmm2, %xmm3
325325
; AVX1-NEXT: vbroadcastss {{.*#+}} xmm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
326-
; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
327-
; AVX1-NEXT: vpsrlw $6, %xmm2, %xmm7
328-
; AVX1-NEXT: vpandn %xmm7, %xmm6, %xmm7
329-
; AVX1-NEXT: vpor %xmm7, %xmm3, %xmm3
326+
; AVX1-NEXT: vpandn %xmm3, %xmm6, %xmm3
327+
; AVX1-NEXT: vpsllw $2, %xmm2, %xmm7
328+
; AVX1-NEXT: vpand %xmm6, %xmm7, %xmm7
329+
; AVX1-NEXT: vpor %xmm3, %xmm7, %xmm3
330330
; AVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm5
331331
; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm2, %xmm2
332332
; AVX1-NEXT: vpsrlw $7, %xmm2, %xmm3
@@ -343,11 +343,11 @@ define <32 x i8> @var_rotate_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
343343
; AVX1-NEXT: vpor %xmm3, %xmm4, %xmm3
344344
; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1
345345
; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
346-
; AVX1-NEXT: vpsllw $2, %xmm0, %xmm3
347-
; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
348-
; AVX1-NEXT: vpsrlw $6, %xmm0, %xmm4
349-
; AVX1-NEXT: vpandn %xmm4, %xmm6, %xmm4
350-
; AVX1-NEXT: vpor %xmm4, %xmm3, %xmm3
346+
; AVX1-NEXT: vpsrlw $6, %xmm0, %xmm3
347+
; AVX1-NEXT: vpandn %xmm3, %xmm6, %xmm3
348+
; AVX1-NEXT: vpsllw $2, %xmm0, %xmm4
349+
; AVX1-NEXT: vpand %xmm6, %xmm4, %xmm4
350+
; AVX1-NEXT: vpor %xmm3, %xmm4, %xmm3
351351
; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1
352352
; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
353353
; AVX1-NEXT: vpsrlw $7, %xmm0, %xmm3

0 commit comments

Comments
 (0)