Hi Boyang,
The placeCell() API you mentioned seems like it should work. The warnings you are seeing are probably caused by a conflict due to the placement. RapidWright has limited error checking so it is possible that something is not quite right about the placement. Just a few things you could check:
1. Are you checking the return value of the API? If it is false, the placement might have failed.
2. You will need to re-route the sites of both the source SiteInst and destination SiteInst. Not sure if this would cause the warning, but it will cause a problem if not done correctly.
3. Check to make sure your design is completely routed in Vivado before running route_design.
Give those a try. If you can post your DCP, I could provide better feedback, but I understand if the design is confidential.
Chris