Skip to content

Commit

Permalink
Fix assert when encoding stdbrx
Browse files Browse the repository at this point in the history
When encoding the stdbrx instruction we hit the following assert:

```
Instruction 0xffef3295360 [stdbrx] (generated from node 0xffef30913b0 [lstorei]): Format 0 cannot be binary encoded by PPCMemSrc1Instruction

Instruction context:

...
     0xfff6c0b9a98 000000a8 [     0xffef3294e80] 7cc0e808          85 	twlle 	gr0, gr29
     0xfff6c0b9a9c 000000ac [     0xffef3294f90] 387d0007          86 	addi 	gr3, gr29, 7
     0xfff6c0b9aa0 000000b0 [     0xffef3295030] 7cc01808          85 	twlle 	gr0, gr3
     0xfff6c0b9aa4 000000b4 [     0xffef32951b0] 7fa307b4          86 	extsw 	gr3, gr29
     0xfff6c0b9aa8 000000b8 [     0xffef32952c0] 38630008          88 	addi 	gr3, gr3, 8
 [     0xffef3295360]	88 	stdbrx 	[gr3, gr27], gr26		# SymRef  <generic int shadow>[#492  Shadow] [flags 0x603 0x0 ]
 [     0xffef3295400]	88 	fence 	Relative[ f3050434 ] (BBEnd (block_7))
 [     0xffef3295ef0]	88 	assocreg
 PRE:
POST: [GPR_     0xffef3293780 : gr26] [&GPR_     0xffef32936d0 : gr27] [GPR_     0xffef3293620 : gr28] [GPR_     0xffef3293570 : gr29]
 [     0xffef3295fb0]	91 	fence 	Relative[ f3050560 ] (BBStart (block_8))
 [     0xffef3296040]	91 	Label [     0xffef3293350]:
 [     0xffef32960d0]	91 	ret
...
(Set env var TR_AssertFullContext for full context)

Node context:

...
n115n     lstorei  <generic int shadow>[#492  Shadow] [flags 0x603 0x0 ] ()                   [     0xffef30913b0] bci=[-1,88,322] rc=0 vc=837 vn=- li=7 udi=- nc=2 flg=0x20
n956n       aladd (X>=0 internalPtr sharedMemory )                                            [     0xffef31e1a90] bci=[-1,85,322] rc=0 vc=837 vn=- li=7 udi=- nc=2 flg=0x8100
n982n         ==>aRegLoad
n955n         lsub (highWordZero X>=0 cannotOverflow )                                        [     0xffef31e1a40] bci=[-1,88,322] rc=0 vc=837 vn=- li=7 udi=- nc=2 flg=0x5100
n954n           i2l (highWordZero X>=0 )                                                      [     0xffef31e19f0] bci=[-1,86,322] rc=0 vc=837 vn=- li=7 udi=- nc=1 flg=0x4100
n980n             ==>iRegLoad
n953n           lconst -8 (X!=0 X<=0 )                                                        [     0xffef31e19a0] bci=[-1,88,322] rc=0 vc=837 vn=- li=7 udi=- nc=0 flg=0x204
n952n       lbyteswap                                                                         [     0xffef31e1950] bci=[-1,84,322] rc=1 vc=837 vn=- li=7 udi=- nc=1
n983n         ==>lRegLoad
...
```

The problem seems to be because the format is not specified for this
instruction.

Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
  • Loading branch information
fjeremic committed Nov 3, 2020
1 parent 4ede03c commit 6fddaab
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/p/codegen/OMRInstOpCodeProperties.hpp
Expand Up @@ -4770,7 +4770,7 @@
/* .description = "Store doubleword byte reverse indexed", */
/* .prefix = */ 0x00000000,
/* .opcode = */ 0x7C000528,
/* .format = */ FORMAT_UNKNOWN,
/* .format = */ FORMAT_RS_RA_RB_MEM,
/* .minimumALS = */ OMR_PROCESSOR_PPC_P7,
/* .properties = */ PPCOpProp_IsStore |
PPCOpProp_ExcludeR0ForRA,
Expand Down
5 changes: 5 additions & 0 deletions fvtest/compilerunittest/p/BinaryEncoder.cpp
Expand Up @@ -4355,6 +4355,10 @@ INSTANTIATE_TEST_CASE_P(StoreIndex, PPCMemSrc1EncodingTest, ::testing::ValuesIn(
std::make_tuple(TR::InstOpCode::stwbrx, MemoryReference(TR::RealRegister::gr31, TR::RealRegister::gr0 ), TR::RealRegister::gr0, 0x7c1f052cu, false),
std::make_tuple(TR::InstOpCode::stwbrx, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr31), TR::RealRegister::gr0, 0x7c00fd2cu, false),
std::make_tuple(TR::InstOpCode::stwbrx, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr0 ), TR::RealRegister::gr31, 0x7fe0052cu, false),
std::make_tuple(TR::InstOpCode::stdbrx, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr0 ), TR::RealRegister::gr0, 0x7c000528u, false),
std::make_tuple(TR::InstOpCode::stdbrx, MemoryReference(TR::RealRegister::gr31, TR::RealRegister::gr0 ), TR::RealRegister::gr0, 0x7c1f0528u, false),
std::make_tuple(TR::InstOpCode::stdbrx, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr31), TR::RealRegister::gr0, 0x7c00fd28u, false),
std::make_tuple(TR::InstOpCode::stdbrx, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr0 ), TR::RealRegister::gr31, 0x7fe00528u, false),
std::make_tuple(TR::InstOpCode::stwcx_r, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr0 ), TR::RealRegister::gr0, 0x7c00012du, false),
std::make_tuple(TR::InstOpCode::stwcx_r, MemoryReference(TR::RealRegister::gr31, TR::RealRegister::gr0 ), TR::RealRegister::gr0, 0x7c1f012du, false),
std::make_tuple(TR::InstOpCode::stwcx_r, MemoryReference(TR::RealRegister::gr0, TR::RealRegister::gr31), TR::RealRegister::gr0, 0x7c00f92du, false),
Expand Down Expand Up @@ -4413,6 +4417,7 @@ INSTANTIATE_TEST_CASE_P(StoreIndex, PPCRecordFormSanityTest, ::testing::Values(
std::make_tuple(TR::InstOpCode::stvehx, TR::InstOpCode::bad, BinaryInstruction()),
std::make_tuple(TR::InstOpCode::stvewx, TR::InstOpCode::bad, BinaryInstruction()),
std::make_tuple(TR::InstOpCode::stwbrx, TR::InstOpCode::bad, BinaryInstruction()),
std::make_tuple(TR::InstOpCode::stdbrx, TR::InstOpCode::bad, BinaryInstruction()),
std::make_tuple(TR::InstOpCode::bad, TR::InstOpCode::stwcx_r, BinaryInstruction()),
std::make_tuple(TR::InstOpCode::stwux, TR::InstOpCode::bad, BinaryInstruction()),
std::make_tuple(TR::InstOpCode::stwx, TR::InstOpCode::bad, BinaryInstruction()),
Expand Down

0 comments on commit 6fddaab

Please sign in to comment.