Issue |
145284
|
Summary |
Vector-AND's with constant Vectors of <i64 {DDDD}, i64 poison> should not load the constant in through GPR's
|
Labels |
new issue
|
Assignees |
|
Reporter |
Validark
|
[Zig Godbolt](https://zig.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,selection:(endColumn:14,endLineNumber:3,positionColumn:14,positionLineNumber:3,selectionStartColumn:14,selectionStartLineNumber:3,startColumn:14,startLineNumber:3),source:'const+std+%3D+@import(%22std%22)%3B%0A%0Aexport+fn+foo(a:+@Vector(16,+u8))+@Vector(8,+u8)+%7B%0A++++return+carryless_multiply_x86(a+%26+@as(@Vector(16,+u8),+@splat(1)),+@splat(0xFF))%3B+%0A%7D%0A%0Afn+carryless_multiply_x86(a:+@Vector(16,+u8),+b:+@Vector(16,+u8))+@Vector(8,+u8)+%7B%0A++++return+@as(%5B2%5D@Vector(8,+u8),+@bitCast(struct+%7B%0A++++++++extern+fn+@%22llvm.x86.pclmulqdq%22(@Vector(2,+u64),+@Vector(2,+u64),+i8)+@Vector(2,+u64)%3B%0A++++%7D.@%22llvm.x86.pclmulqdq%22(%0A++++++++@bitCast(a),%0A++++++++@bitCast(b),+0)))%5B0%5D%3B%0A%7D'),l:'5',n:'0',o:'Zig+source+%231',t:'0')),k:52.428234686299206,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:ztrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,libs:!(),options:'-OReleaseFast+-target+x86_64-linux+-mcpu%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+zig+trunk+(Editor+%231)',t:'0'),(h:tool,i:(args:'-iterations%3D1',argsPanelShown:'0',compilerName:'zig+trunk',editorid:1,fontScale:14,fontUsePx:'0',j:1,monacoEditorHasBeenAutoOpened:'1',monacoEditorOpen:'1',monacoStdin:'1',stdin:'',stdinPanelShown:'1',toolId:llvm-mcatrunk,wrap:'1'),l:'5',n:'0',o:'llvm-mca+zig+trunk+(Editor+%231,+Compiler+%231)',t:'0')),k:47.57176531370081,l:'4',m:100,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4) [LLVM Godbolt](https://llvm.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,selection:(endColumn:1,endLineNumber:12,positionColumn:1,positionLineNumber:12,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'define+dso_local+%3C8+x+i8%3E+@foo(%3C16+x+i8%3E+%250)+local_unnamed_addr+%7B%0AEntry:%0A++%251+%3D+bitcast+%3C16+x+i8%3E+%250+to+%3C2+x+i64%3E%0A++%252+%3D+and+%3C2+x+i64%3E+%251,+%3Ci64+72340172838076673,+i64+poison%3E%0A++%253+%3D+tail+call+%3C2+x+i64%3E+@llvm.x86.pclmulqdq(%3C2+x+i64%3E+%252,+%3C2+x+i64%3E+%3Ci64+-1,+i64+poison%3E,+i8+signext+0)%0A++%25.sroa.0.0.vec.extract.i+%3D+extractelement+%3C2+x+i64%3E+%253,+i64+0%0A++%254+%3D+bitcast+i64+%25.sroa.0.0.vec.extract.i+to+%3C8+x+i8%3E%0A++ret+%3C8+x+i8%3E+%254%0A%7D%0A%0Adeclare+%3C2+x+i64%3E+@llvm.x86.pclmulqdq(%3C2+x+i64%3E,+%3C2+x+i64%3E,+i8+immarg)+%231%0A'),l:'5',n:'0',o:'LLVM+IR+source+%231',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:llctrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,libs:!(),options:'-O3+--mtriple%3Dx86_64-linux+-mcpu%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+llc+(trunk)+(Editor+%231)',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',m:100,n:'0',o:'',t:'0')),version:4)
```llvm
define dso_local <8 x i8> @foo(<16 x i8> %0) local_unnamed_addr {
Entry:
%1 = bitcast <16 x i8> %0 to <2 x i64>
%2 = and <2 x i64> %1, <i64 72340172838076673, i64 poison>
%3 = tail call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %2, <2 x i64> <i64 -1, i64 poison>, i8 signext 0)
%.sroa.0.0.vec.extract.i = extractelement <2 x i64> %3, i64 0
%4 = bitcast i64 %.sroa.0.0.vec.extract.i to <8 x i8>
ret <8 x i8> %4
}
declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8 immarg) #1
```
Compiles to:
```asm
foo: # @foo
movabs rax, 72340172838076673
vmovq xmm1, rax
vpand xmm0, xmm0, xmm1
vpcmpeqd xmm1, xmm1, xmm1
vpclmulqdq xmm0, xmm0, xmm1, 0
ret
```
Should be:
```asm
.LCPI0_1:
.zero 4,1
foo:
vandps xmm0, xmm0, dword ptr [rip + .LCPI0_1]{1to4}
vpcmpeqd xmm1, xmm1, xmm1
vpclmulqdq xmm0, xmm0, xmm1, 0
ret
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs