<html dir="ltr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style title="owaParaStyle"><!--P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
--></style>
<meta content="MSHTML 6.00.2900.6036" name="GENERATOR">
</head>
<body ocsi="x">
<div dir="ltr"><font face="Tahoma" color="#000000" size="2">Hi all </font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">Is it all right to commit this patch?</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">Thanks,</font></div>
<div dir="ltr"><font face="tahoma" size="2">Jin-Gu Kang</font></div>
<div dir="ltr">
<hr tabindex="-1">
</div>
<div dir="ltr"><font face="Tahoma" size="2"><b>From:</b> llvm-commits-bounces@cs.uiuc.edu [llvm-commits-bounces@cs.uiuc.edu] On Behalf Of Jin Gu Kang [jaykang10@imrc.kist.re.kr]<br>
<b>Sent:</b> Friday, March 11, 2011 3:40 PM<br>
<b>To:</b> llvm-commits@cs.uiuc.edu<br>
<b>Subject:</b> [llvm-commits] [llvm] InstCombiner::visitStoreInst() about bitfield access<br>
</font><br>
</div>
<div></div>
<div>
<div dir="ltr"><font face="Tahoma" color="#000000" size="2">Hi all</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">I found a case where some of instructions generated by</font></div>
<div dir="ltr"><font face="tahoma" size="2">bitfield access can be removed</font><font face="tahoma" size="2">.</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">For example,</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr">-------------------------------------------------------------</div>
<div dir="ltr"><font face="tahoma" size="2">test c source code</font></div>
<div dir="ltr"><font face="tahoma" size="2">
<div dir="ltr">-------------------------------------------------------------</div>
</font></div>
<div dir="ltr"><font face="tahoma" size="2">struct test {<br>
int low:4;<br>
int high:4;<br>
char ch;<br>
};</font></div>
<font face="tahoma" size="2">
<div dir="ltr"><br>
int main()<br>
{<br>
 struct test u;<br>
 u.low=0x5;<br>
 printf("%d", u.low);</div>
<div dir="ltr"> return 0;<br>
}</font></div>
<font face="tahoma" size="2">
<div dir="ltr">-------------------------------------------------------------</div>
<div dir="ltr"><font face="tahoma">bitcode after InstCombine</font></div>
<div dir="ltr">
<div dir="ltr">-------------------------------------------------------------</div>
</div>
<div dir="ltr"><font face="tahoma">%struct.test = type { i8, i8, [2 x i8] }</font></div>
<div dir="ltr"><font face="tahoma">@.str = private unnamed_addr constant [3 x i8] c"%d\00", align 4</font></div>
<div dir="ltr"><font face="tahoma">define i32 @main() nounwind {<br>
entry:<br>
  %retval = alloca i32, align 4<br>
  %u = alloca %struct.test, align 4<br>
  %0 = getelementptr inbounds %struct.test* %u, i32 0, i32 0<br>
  %1 = load i8* %0, align 4<br>
  %2 = and i8 %1, -16<br>
  %3 = or i8 %2, 5<br>
  store i8 %3, i8* %0, align 4<br>
  %4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([3 x i8]* @.str, i32 0, i32 0), i32 5) nounwind<br>
  store i32 0, i32* %retval, align 4<br>
  br label %return</font></div>
<div dir="ltr"><font face="tahoma">return:                                           ; preds = %entry<br>
  %retval1 = load i32* %retval, align 4<br>
  ret i32 %retval1<br>
}<br>
-------------------------------------------------------------</font></div>
<font face="tahoma">
<div dir="ltr"><font face="tahoma">I think the following instructions are useless on above bitcode.</font></div>
<div dir="ltr"><font face="tahoma"></font> </div>
<div dir="ltr">  %u = alloca %struct.test, align 4<br>
  %0 = getelementptr inbounds %struct.test* %u, i32 0, i32 0<br>
  %1 = load i8* %0, align 4<br>
  %2 = and i8 %1, -16<br>
  %3 = or i8 %2, 5<br>
  store i8 %3, i8* %0, align 4</div>
<div dir="ltr"><font face="tahoma"></font> </div>
<div dir="ltr"><font face="tahoma">In case of normal filed access, current visitStoreInst() function removes</font></div>
<div dir="ltr"><font face="tahoma">useless instructions well.</font></div>
<div dir="ltr"><font face="tahoma"></font> </div>
<div dir="ltr"></font><font face="tahoma">I made a patch to remove useless instructions in case of bitfield access.</font></div>
<div dir="ltr"><font face="tahoma"></font> </div>
<div dir="ltr"><font face="tahoma">Please review the attached patch.</font></div>
<div dir="ltr"><font face="tahoma"></font> </div>
<div dir="ltr"><font face="tahoma">Thanks,</font></div>
<div dir="ltr"><font face="tahoma">Jin-Gu Kang</font></font></div>
</div>
</body>
</html>