Based on my reading of https://llvm.org/docs/LangRef.html#llvm-init-trampoline-intrinsic, init.trampoline writes to the first argument, while the other two are readnone. These two arguments are only captured and written into the trampoline memory. This also matches what I see in the X86TargetLowering::LowerINIT_TRAMPOLINE() implementation.
Unfortunately the person who originally worked on trampolines doesn't seem to be active anymore, so adding some general memory attribute reviewers... I hope that with this change we can remove special intrinsic handling in MemoryLocation::getForDest().