aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2014-10-15 21:08:59 +0000
committerTom Stellard <thomas.stellard@amd.com>2014-10-15 21:08:59 +0000
commitc8d7920ad96b5391bfd1fff2b2381daf75e596de (patch)
tree344ec51ec00b40b466693a11cef1fc91fddc7876 /clang/lib/CodeGen/CodeGenModule.cpp
parent2181fb2ff30f9603a68c98c88af7381d90c42eff (diff)
downloadllvm-c8d7920ad96b5391bfd1fff2b2381daf75e596de.zip
llvm-c8d7920ad96b5391bfd1fff2b2381daf75e596de.tar.gz
llvm-c8d7920ad96b5391bfd1fff2b2381daf75e596de.tar.bz2
R600/SI: Fix bug where immediates were being used in DS addr operands
The SelectDS1Addr1Offset complex pattern always tries to store constant lds pointers in the offset operand and store a zero value in the addr operand. Since the addr operand does not accept immediates, the zero value needs to first be copied to a register. This newly created zero value will not go through normal instruction selection, so we need to manually insert a V_MOV_B32_e32 in the complex pattern. This bug was hidden by the fact that if there was another zero value in the DAG that had not been selected yet, then the CSE done by the DAG would use the unselected node for the addr operand rather than the one that was just created. This would lead to the zero value being selected and the DAG automatically inserting a V_MOV_B32_e32 instruction. llvm-svn: 219848
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions