Disabled by default behind an option.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
| llvm/lib/Target/X86/X86SelectionDAGInfo.cpp | ||
|---|---|---|
| 198 | Is this needed because we're no longer calling this with just constants we fixed the size of? | |
| llvm/lib/Target/X86/X86SelectionDAGInfo.cpp | ||
|---|---|---|
| 198 | Do you mean, "is the getCopyToReg call needed"? The size needs to be loaded into the RCX/ECX register for the rep movs instruction and the callers aren't doing that. So, it seems yes. Did you mean in a different way? | |
| llvm/lib/Target/X86/X86SelectionDAGInfo.cpp | ||
|---|---|---|
| 198 | I was asking why the getZExtOrTrunc was added. do we create memcpy's where the size type isn't the same size as the pointer? | |
| llvm/lib/Target/X86/X86SelectionDAGInfo.cpp | ||
|---|---|---|
| 198 | Without the getZExtOrTrunc, I get this fatal error, for example, Cannot copy EAX to RCX which is coming from X86InstrInfo::copyPhysReg. Re: "do we create memcpy's where the size type isn't the same size as the pointer?" yes, it seems so. | |
| llvm/lib/Target/X86/X86SelectionDAGInfo.cpp | ||
|---|---|---|
| 198 | The type mismatch is coming from here: static SDValue CreateCopyOfByValArgument(SDValue Src, SDValue Dst,
SDValue Chain, ISD::ArgFlagsTy Flags,
SelectionDAG &DAG, const SDLoc &dl) {
SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), dl, MVT::i32);
...I'm going to fix that instead. | |
Address comments.
| llvm/lib/Target/X86/X86ISelLowering.cpp | ||
|---|---|---|
| 3113 | My bad. This should actually be an int const rather than an int pointer const. Will change it to check if it's 64 bit instead. | |
| llvm/lib/Target/X86/X86SelectionDAGInfo.cpp | ||
| 198 | It occurs in a clang bootstrap build. Added a reduced test below. | |
| llvm/lib/Target/X86/X86ISelLowering.cpp | ||
|---|---|---|
| 3113 | IntPtrConstant is an integer the width of a pointer which I think is what we want. You can't check for i64 being legal. That doesn't work for GNUX32 or NaCl which use 32-bit pointers on 64 bit. | |
Maybe just use getIntPtrConstant instead of getConstant?