<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>Loads (on ptx64) with an sext of a computed index operand fail instruction selection:</div><div><br></div><div><div>LLVM ERROR: Cannot select: 0x7ff01401c210: i64,ch = load 0x10580e820, 0x7ff01401b510, 0x7ff01401b910<LD4[%memref1], sext from i32> [ID=8]</div><div>  0x7ff01401b510: i64 = PTXISD::LOAD_PARAM 0x10580e820, 0x7ff01401b410 [ORD=2] [ID=6]</div><div>  0x7ff01401b910: i64 = undef [ORD=4] [ID=3]</div></div><div><br></div><div>This is for code of the form:</div><div><br></div><div>  %ptr = gep i64* %base, <i style="font-weight: bold; ">i32</i> %offset</div><div>  %v = load i64* %ptr</div><div><br></div><div>when the offset gets directly inlined into the selection DAG slot of the load during lowering. If it's managed to be stored off in a vreg or something first (like if it's common subexpression eliminated with another sext of the same value to i64 that gets used before), this doesn't happen and codegen works fine.</div><div><br></div><div>The attached trivial ll fails with llc -march=ptx64, and works if either of the "works" paths is uncommented instead of "breaks".</div></div><div><br></div><div>Any suggestions for where to look would be hugely appreciated. This has crept out from the closed just in time to bite me before a major paper deadline on Tuesday.</div><div><br></div><div>Thanks.</div><div><br></div></body></html>