diff --git a/src/jit/codegencommon.cpp b/src/jit/codegencommon.cpp index 3432444d8070..b7a554123a95 100644 --- a/src/jit/codegencommon.cpp +++ b/src/jit/codegencommon.cpp @@ -1869,26 +1869,26 @@ bool CodeGen::genCreateAddrMode(GenTreePtr addr, The following indirections are valid address modes on x86/x64: [ icon] * not handled here - [reg ] * not handled here + [reg ] [reg + icon] - [reg2 + reg1 ] - [reg2 + reg1 + icon] - [reg2 + 2 * reg1 ] - [reg2 + 4 * reg1 ] - [reg2 + 8 * reg1 ] - [ 2 * reg1 + icon] - [ 4 * reg1 + icon] - [ 8 * reg1 + icon] - [reg2 + 2 * reg1 + icon] - [reg2 + 4 * reg1 + icon] - [reg2 + 8 * reg1 + icon] + [reg1 + reg2 ] + [reg1 + reg2 + icon] + [reg1 + 2 * reg2 ] + [reg1 + 4 * reg2 ] + [reg1 + 8 * reg2 ] + [ 2 * reg2 + icon] + [ 4 * reg2 + icon] + [ 8 * reg2 + icon] + [reg1 + 2 * reg2 + icon] + [reg1 + 4 * reg2 + icon] + [reg1 + 8 * reg2 + icon] The following indirections are valid address modes on arm64: [reg] [reg + icon] - [reg2 + reg1] - [reg2 + reg1 * natural-scale] + [reg1 + reg2] + [reg1 + reg2 * natural-scale] */ @@ -2448,6 +2448,11 @@ bool CodeGen::genCreateAddrMode(GenTreePtr addr, noway_assert(FitsIn(cns)); + if (rv1 == nullptr && rv2 == nullptr) + { + return false; + } + /* Success - return the various components to the caller */ *revPtr = rev; diff --git a/src/jit/gentree.h b/src/jit/gentree.h index 2261140ee4e0..c5b44983ba79 100644 --- a/src/jit/gentree.h +++ b/src/jit/gentree.h @@ -4166,6 +4166,7 @@ struct GenTreeAddrMode : public GenTreeOp GenTreeAddrMode(var_types type, GenTreePtr base, GenTreePtr index, unsigned scale, unsigned offset) : GenTreeOp(GT_LEA, type, base, index) { + assert(base != nullptr || index != nullptr); gtScale = scale; gtOffset = offset; }