diff options
| author | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-07-15 14:37:57 +0000 |
|---|---|---|
| committer | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-07-15 14:37:57 +0000 |
| commit | 8d879c8d95496c0a9049ff80261fbc5754ce56b3 (patch) | |
| tree | afcd623212f8476231b08a8870b66c26794a3149 /llvm/lib | |
| parent | 60fb5e97a0df790eea5c05b82fb1ee87d48e4d76 (diff) | |
| download | bcm5719-llvm-8d879c8d95496c0a9049ff80261fbc5754ce56b3.tar.gz bcm5719-llvm-8d879c8d95496c0a9049ff80261fbc5754ce56b3.zip | |
[AMDGPU][MC] Corrected encoding of src0 for DS_GWS_* instructions
See bug 42599: https://bugs.llvm.org/show_bug.cgi?id=42599
Reviewers: artem.tamazov, arsenm
Differential Revision: https://reviews.llvm.org/D64716
llvm-svn: 366067
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/DSInstructions.td | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/DSInstructions.td b/llvm/lib/Target/AMDGPU/DSInstructions.td index 93308e6d78a..e39f565fd22 100644 --- a/llvm/lib/Target/AMDGPU/DSInstructions.td +++ b/llvm/lib/Target/AMDGPU/DSInstructions.td @@ -38,6 +38,8 @@ class DS_Pseudo <string opName, dag outs, dag ins, string asmOps, list<dag> patt bits<1> has_data0 = 1; bits<1> has_data1 = 1; + bits<1> has_gws_data0 = 0; // data0 is encoded as addr + bits<1> has_offset = 1; // has "offset" that should be split to offset0,1 bits<1> has_offset0 = 1; bits<1> has_offset1 = 1; @@ -320,7 +322,7 @@ class DS_GWS_1D <string opName> : DS_GWS<opName, (ins VGPR_32:$data0, offset:$offset, gds:$gds), "$data0$offset gds"> { - let has_data0 = 1; + let has_gws_data0 = 1; } class DS_VOID <string opName> : DS_Pseudo<opName, @@ -832,7 +834,7 @@ class Base_DS_Real_gfx6_gfx7_gfx10<bits<8> op, DS_Pseudo ps, int ef> : let Inst{17} = !if(ps.has_gds, gds, ps.gdsValue); let Inst{25-18} = op; let Inst{31-26} = 0x36; - let Inst{39-32} = !if(ps.has_addr, addr, 0); + let Inst{39-32} = !if(ps.has_addr, addr, !if(ps.has_gws_data0, data0, 0)); let Inst{47-40} = !if(ps.has_data0, data0, 0); let Inst{55-48} = !if(ps.has_data1, data1, 0); let Inst{63-56} = !if(ps.has_vdst, vdst, 0); @@ -1051,7 +1053,7 @@ class DS_Real_vi <bits<8> op, DS_Pseudo ds> : let Inst{16} = !if(ds.has_gds, gds, ds.gdsValue); let Inst{24-17} = op; let Inst{31-26} = 0x36; // ds prefix - let Inst{39-32} = !if(ds.has_addr, addr, 0); + let Inst{39-32} = !if(ds.has_addr, addr, !if(ds.has_gws_data0, data0, 0)); let Inst{47-40} = !if(ds.has_data0, data0, 0); let Inst{55-48} = !if(ds.has_data1, data1, 0); let Inst{63-56} = !if(ds.has_vdst, vdst, 0); |

