Page MenuHomePhabricator

kthomsen (Kei Thomsen)
User

Projects

User does not belong to any projects.

User Details

User Since
Jan 16 2019, 1:09 AM (40 w, 5 h)

Recent Activity

Jul 1 2019

kthomsen added a comment to D54409: PowerPC/SPE: Fix load/store handling for SPE.

I found one more patch, where I'm not sure if we already had this one and removed it, or if I simply forgot to post it.

Jul 1 2019, 1:17 AM · Restricted Project
kthomsen added a comment to D54409: PowerPC/SPE: Fix load/store handling for SPE.

I found an even better way to check for the Unsigned (thank you for the hint) 8bit with alignment 8 offset. It has now been integrated into the SelectAddressEVXRegReg() function. Therefore the calling function SelectAddressRegReg() doesn't need to deal with any EVx instructions specials, it is all done in the EVXRegReg function.
Explanation for the SelectAddressEVXRegReg function: If it can find a MVT::f64 (there can only be maximal one MVT::f64) , the offset used here will be checked if it is known now and if the offset is 0..255, with an alignment of 8. Then a false is returned and the calling SelectAddressRegReg() will continue with the isIntS16Immediate(), which will be true as well (if it fits into 8 bit unsigned, it will fit into 16 bit signed as well).

--- PPCISelLowering.orig.cpp    2019-07-01 09:08:11.444438400 +0200
+++ PPCISelLowering.cpp 2019-07-01 08:45:16.911244700 +0200
@@ -2227,9 +2227,27 @@ bool llvm::isIntS16Immediate(SDValue Op,
   return isIntS16Immediate(Op.getNode(), Imm);
 }
Jul 1 2019, 1:05 AM · Restricted Project

Jun 28 2019

kthomsen added a comment to D54409: PowerPC/SPE: Fix load/store handling for SPE.

I integrated the last patch (yes it is working) and saw, that there can be a another optimization. It is now checking for the Offset to fit into the 8-bit offset of the EVLDD / EVSTD, including an alignment of 8. This reduces the effort if variables are stored on the stack and if the variable is in a range short enough, to be addressed directly.

Jun 28 2019, 1:25 AM · Restricted Project

Mar 28 2019

kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

@jhibbits I don't know how to create a new revision here. My idea is to handle this fix via you, as you are already known for the SPE modifications.

Mar 28 2019, 12:47 AM · Restricted Project

Mar 27 2019

kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

I found an issue with the SPE compare operations. The result of a efdcmpeq , efdcmpgt and efdcmplt is every time the GT-Bit in the Condition Register. This is adressed in one place of the PPCISelDAGToDAG.cpp, but not addressed for a second case of the code generation.
The diff of PPCISelDAGToDAG.cpp is:

Mar 27 2019, 5:38 AM · Restricted Project

Jan 29 2019

kthomsen added a comment to D49754: Add -m(no-)spe, and e500 CPU definitions and support to clang.

With this modification for SPE in VAARG, I was now able to compile all OS-9 libraries for SPE and tested them with whetstone. The results of the whetstone are the same like with a real FPU and they are correctly shown with printf.
Also the performance of CLANG is about 30% better than with my old compiler. Therefore, the modification in tools/clang/lib/CodeGen/TargetInfo.cpp line 9322

Jan 29 2019, 7:16 AM · Restricted Project, Restricted Project
kthomsen added a comment to D49754: Add -m(no-)spe, and e500 CPU definitions and support to clang.

The desired function for this va_arg is not in lib/Target/PowerPC/*.cpp, it is in tools/clang/lib/CodeGen/TargetInfo.cpp , a little bit unexpected to me.
PPC32_SVR4_ABIInfo::EmitVAArg() is doing the va_arg handling. For testing, I have added a hasSPE = true and treat the parameter like SoftFloat. It looks good! Now I need to find out, where to get "hasSPE" from.

Jan 29 2019, 3:05 AM · Restricted Project, Restricted Project

Jan 28 2019

kthomsen added a comment to D49754: Add -m(no-)spe, and e500 CPU definitions and support to clang.

@vit9696 I'm working since 3 days on that issue, and found nothing... PPCISelLowering.cpp has 2 functions: LowerVASTART() and LowerVAARG(). LowerVASTART is correctly called (store the GPR to the internal va_list structure), but LowerVAARG is never called and I don't understand why. The generated code is exactly what the LowerVAARG source is shown, but it must be generated somewhere else.
The Problem is the following:
The calling function is correctly placing the double date into a register pair (r5/r6 or r7/r8). In the function all registers (GPR) are placed on the stack (by LowerVASTART) and it reserves space for the FPU registers to save (which SPE don't have and therefore this space is left empty). The va_arg is now getting the double parameter from that FPU area (it has an offset of 32 to the GPR space), but not from the GPR space.
I am searching for that code generation. I'm 99% sure LowerVAARG can generate that code, but 100% sure that LowerVAARG is not called. Therefore, where is the va_arg loading generated?
My test code:

Jan 28 2019, 11:16 PM · Restricted Project, Restricted Project

Jan 24 2019

kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

I placed the info in this thread, as D54583 already has PPCISelLowering.cpp in it. But in real it better fits into D54409.

Jan 24 2019, 1:17 AM · Restricted Project

Jan 23 2019

kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

As promised I have modified the SelectAddressRegReg() in PPCISelLowering.cpp to create correct evldd(x) and evstdd(x) instructions when accessing global variables.

Jan 23 2019, 6:43 AM · Restricted Project

Jan 21 2019

kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

The Patch D54409 is only handling the variables on the stack named in the code as "framedata". I'm going on to find out, how to manage this for global variables. SelectAddressRegReg() and SelectAddressRegImm() are doing this, but there is no information about the Target data. Maybe it needs to be decided somewhere else.

Jan 21 2019, 11:37 PM · Restricted Project
kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

I have a question:
When compiling

Jan 21 2019, 6:39 AM · Restricted Project

Jan 18 2019

kthomsen added a comment to D54583: PowerPC: Optimize SPE double parameter calling setup.

Hi Justin, I'm watching your work and used your patches to bring SPE into my CLANG for OS-9.
The OutVals[] issue is what I found yesterday as well by debugging the CLANG part.
There is a 2. location of this in PPCTargetLowering::LowerReturn()

Jan 18 2019, 3:00 AM · Restricted Project