<div dir="ltr"><div><div><div><div><div><div>Hi Bruce!!<br><br></div>Im using "C" language. <br><br></div>As you said...,i tried using Global pointer..,but i still am not able to get the Registers exactly as i wanted.<br></div><br></div>I found "-mem2reg" as a better alternative. But Problem is even though the resulting Intermediate file( .ll ) is <br></div>good...,the final assembly file( .s) file is making a lot of DCE.<br><br></div><div>Im Posting an example :<br><br><br></div><div><b><u>Original Intermediate file :</u></b><br></div><div><br>define void @main() #0 {<br>  %a = alloca i32, align 4<br>  %b = alloca i32, align 4<br>  %c = alloca i32, align 4<br>  store i32 2, i32* %a, align 4<br>  store i32 3, i32* %b, align 4<br>  store i32 4, i32* %c, align 4<br>  %1 = load i32* %a, align 4<br>  %2 = add nsw i32 %1, 10<br>  store i32 %2, i32* %a, align 4<br>  %3 = load i32* %a, align 4<br>  %4 = load i32* %b, align 4<br>  %5 = add nsw i32 %3, %4<br>  store i32 %5, i32* %a, align 4<br>  store i32 5, i32* %a, align 4<br>  %6 = load i32* %b, align 4<br>  %7 = sub nsw i32 %6, 2<br>  store i32 %7, i32* %b, align 4<br>  %8 = load i32* %b, align 4<br>  %9 = load i32* %a, align 4<br>  %10 = sub nsw i32 %8, %9<br>  store i32 %10, i32* %b, align 4<br>  %11 = load i32* %c, align 4<br>  %12 = xor i32 %11, 4<br>  store i32 %12, i32* %c, align 4<br>  %13 = load i32* %c, align 4<br>  %14 = load i32* %c, align 4<br>  %15 = xor i32 %13, %14<br>  store i32 %15, i32* %c, align 4<br>  %16 = load i32* %a, align 4<br>  %17 = load i32* %b, align 4<br>  %18 = or i32 %16, %17<br>  store i32 %18, i32* %a, align 4<br>  %19 = load i32* %b, align 4<br>  %20 = and i32 %19, 2<br>  store i32 %20, i32* %b, align 4<br>  store i32 7, i32* %a, align 4<br>  %21 = load i32* %a, align 4<br>  %22 = or i32 %21, 2<br>  %23 = load i32* %b, align 4<br>  %24 = load i32* %c, align 4<br>  %25 = or i32 %23, %24<br>  %26 = and i32 %22, %25<br>  store i32 %26, i32* %b, align 4<br>  ret void<br>}<br><br><br></div><u><b>After using "-mem2reg"</b></u>:<br><div><br><div>define void @main() #0 {<br>  %1 = add nsw i32 2, 10<br>  %2 = add nsw i32 %1, 3<br>  %3 = sub nsw i32 3, 2<br>  %4 = sub nsw i32 %3, 5<br>  %5 = xor i32 4, 4<br>  %6 = xor i32 %5, %5<br>  %7 = or i32 5, %4<br>  %8 = and i32 %4, 2<br>  %9 = or i32 7, 2<br>  %10 = or i32 %8, %6<br>  %11 = and i32 %9, %10<br>  ret void<br>}<br><br></div><div><u><b>Assembly file:</b></u><br><br> Return;<br><br><br></div><div>As you can see...,all the code is eliminated as dead code...,now is there a possibility to stop Dead code elimination?<br><br></div><div><br></div><div><br></div></div></div>