<font face="arial" size="2"><p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;">I'm a new LLVM developer contributing patches for the AVR platform and I'm trying to understand which parts of the code base are malfunctioning in my case.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;">This LLVM IR...</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;">define hidden i32 @setServoAngle3(i32) local_unnamed_addr {<br />entry:<br /> %1 = call i32 @myExternalFunction1(i32 %0, i32 119)<br /> ret i32 %1<br />}</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;">declare i32 @myExternalFunction1(i32, i32)</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;">Is being lowered to this assembly language...</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; word-wrap: break-word;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">setServoAngle3: <span class="Apple-converted-space">                        </span>; @setServoAngle3</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">; %bb.0:<span class="Apple-converted-space">                                </span>; %entry</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> ldi r18, 119</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> ldi r19, 0</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> ldi r20, 0</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> ldi r21, 0</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> call myExternalFunction1</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> mov r18, r22</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> mov r19, r23</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> mov r22, r24</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> mov r23, r25</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> mov r24, r18</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> mov r25, r19</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;"> ret</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;">Which is clearly wrong.  It should just be...</p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">setServoAngle3: <span class="Apple-converted-space" style="display: inline-block;">                        </span>; @setServoAngle3</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">; %bb.0:<span class="Apple-converted-space" style="display: inline-block;">                                </span>; %entry</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">ldi r18, 119</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">ldi r19, 0</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">ldi r20, 0</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">ldi r21, 0</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">call myExternalFunction1</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">ret</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;">The AVR ABI is based on the AVR GCC ABI, which specifies for register passing and returning of arguments, a 32 bit value is passed in r22, r23, r24, r25 (the registers are 8 bit). And two 16 bit values would be passed, argument 1 in r24, r25 and argument 2 in r22, r23.</p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;">When I'm looking in the function lowering code in SelectionDAGISel::LowerArguments and </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">AVRTargetLowering::LowerFormalArguments, we already have a problem because the 32 bit return value has been turned into two 16 bit values by the legaliser and the information has been lost that it was one 32 bit value. So the lowering code cannot correctly lower the return value and gets the two 16 bit words mixed up.</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"><span style="font-variant-ligatures: no-common-ligatures;">Which bit of the code do people think is at fault here? What hooks need changing on AVR?</span></p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;">Thanks for any advice or help you can give.</p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;">Carl</p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p>
<p style="margin:0;padding:0;margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000;"> </p></font>