<div dir="ltr">Dear Developers,<div><br></div><div>I compile a OpenCL kernel, FFT, in AMDAPP SDK v2.5 using clang 3.8 + libclc and assembling the code with lld (The LLVM linker). The assembly code contains the following assembly codes (and lots of other similar format assembly) that fails to be parsed by AMDGPUAsmParser. It seems to me that both are valid instructions after looking at the SI instruction spec.</div><div><br></div><div>s_mov_b32 s0, 0xfe5163ab<br></div><div>v_mad_f32 v9, 0.5, v5, -v8<br></div><div><br></div><div>To reproduce this, I write this two lines in a text file and run</div><div><br></div><div>llvm-mc -arch=amdgcn -mcpu=kaveri input.s</div><div><br></div><div>The first line has the following error message:</div><div><br></div><div><div>sop1-playground.s:1:15: error: invalid immediate: only 32-bit values are legal</div><div>s_mov_b32 s0, 0xfe5163ab</div><div>                         ^</div><div>sop1-playground.s:1:25: error: failed parsing operand.</div><div>s_mov_b32 s0, 0xfe5163ab</div><div>                                            ^</div></div><div>The part of stack dump:</div><div><br></div><div>...</div><div><div>#9 0x4711ee (anonymous namespace)::AMDGPUOperand::setModifiers(unsigned int) /mnt/dm-0/codebase/Compilers/LLVM/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp:185:21</div><div>#10 0x46ff6a (anonymous namespace)::AMDGPUAsmParser::parseOperand(llvm::SmallVectorImpl<std::unique_ptr<llvm::MCParsedAsmOperand, std::default_delete<llvm::MCParsedAsmOperand> > >&, llvm::StringRef) /mnt/dm-0/codebase/Compilers/LLVM/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp:1040:16</div><div>#11 0x46cd46 (anonymous namespace)::AMDGPUAsmParser::ParseInstruction(llvm::ParseInstructionInfo&, llvm::StringRef, llvm::SMLoc, llvm::SmallVectorImpl<std::unique_ptr<llvm::MCParsedAsmOperand, std::default_delete<llvm::MCParsedAsmOperand> > >&) /mnt/dm-0/codebase/Compilers/LLVM/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp:1085:43</div></div><div>...</div><div><br></div><div>The second line of the assembly has the assertion fail:</div><div><br></div><div>llvm-mc: /mnt/dm-0/codebase/Compilers/LLVM/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp:184: void (anonymous namespace)::AMDGPUOperand::setModifiers(unsigned int): Assertion `isReg()' failed.<br></div><div><br></div><div>and reports that 0.5 is "error: invalid operand for instruction"</div><div><br></div><div>v_mad_f32 v9, 0.5, v5, -v8<br></div><div>                         ^<br></div><div><br></div><div>Regards,</div><div><br></div><div><div><div style="color:rgb(0,0,0);font-size:12.8px"><span class="">李弘宇</span> (Li, Hong-Yu)</div><div style="color:rgb(0,0,0);font-size:12.8px">Department of Computer Science & Information Engineering</div><div style="color:rgb(0,0,0);font-size:12.8px">National Taiwan University</div></div></div></div>