<div dir="ltr"><div>Hi Paul and David,</div><div>yes I have just realised that the third check was the one I was looking for... For some reason I was only looking for <b>PNG_USER_WIDTH_MAX.</b></div><div><b><br></b></div><div>Now it is all clear :)</div><div><br></div><div>Thanks again</div><div>Alberto<br></div><div><b></b></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno mer 18 dic 2019 alle ore 23:03 Robinson, Paul <<a href="mailto:paul.robinson@sony.com">paul.robinson@sony.com</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_5838037635556149818WordSection1">
<p class="MsoNormal">               if (width == 0)<u></u><u></u></p>
<p class="MsoNormal">became<u></u><u></u></p>
<p class="MsoNormal">               %1 = icmp eq i32 %width, 0<u></u><u></u></p>
<p class="MsoNormal">which is straightforward; and<u></u><u></u></p>
<p class="MsoNormal">               else if (width > PNG_UINT_31_MAX)<u></u><u></u></p>
<p class="MsoNormal">became (assuming the constant is 0x7fffffff)<u></u><u></u></p>
<p class="MsoNormal">               %3 icmp slt i32 %width, 0<u></u><u></u></p>
<p class="MsoNormal">(note this is a signed comparison with 0, which is equivalent to the comparison in the source)<u></u><u></u></p>
<p class="MsoNormal">and finally<u></u><u></u></p>
<p class="MsoNormal">               if (width > png_ptr->user_width_max)<u></u><u></u></p>
<p class="MsoNormal">became<u></u><u></u></p>
<p class="MsoNormal">               %8 = icmp ult i32 %7, %width<u></u><u></u></p>
<p class="MsoNormal">after loading the png_ptr field into %7 in the previous instruction.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Does that help?<u></u><u></u></p>
<p class="MsoNormal">--paulr   <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-color:currentcolor currentcolor currentcolor blue;border-style:none none none solid;border-width:medium medium medium 1.5pt;padding:0in 0in 0in 4pt">
<div>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> <b>On Behalf Of
</b>David Blaikie via llvm-dev<br>
<b>Sent:</b> Wednesday, December 18, 2019 5:30 PM<br>
<b>To:</b> Alberto Barbaro <<a href="mailto:barbaro.alberto@gmail.com" target="_blank">barbaro.alberto@gmail.com</a>><br>
<b>Cc:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [llvm-dev] Missing code depending on a #ifdef within the .ll file<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">I'm sorry, I don't understand the question - the source code shows 3 calls to png_warning (one of them from the if block you're interested in), and the IR shows 3 calls to png_warning - so it looks like the body of the if block is included
 in the IR you've shown?<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Dec 18, 2019 at 2:24 PM Alberto Barbaro <<a href="mailto:barbaro.alberto@gmail.com" target="_blank">barbaro.alberto@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">Hi David,<u></u><u></u></p>
<div>
<p class="MsoNormal">My question is: why both #ifdef and #else branches are missing? I think at least one of the two should be present... In fact there is a case where the width could be greater then <u></u><u></u></p>
</div>
<p class="MsoNormal">PNG_USER_WIDTH_MAX but not greater then PNG_UINT_31_MAX. That's why I was expecting at least one of the two...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Alberto<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Dec 18, 2019, 22:12 David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Not sure I understand the question - but usually a compiler would, on one compilation, only compile one versoin of the code with one set of defines. <br>
<br>
There could be invalid code (it could literally be junk - or it could be code that's only valid when the define is true/false, etc) in an unreachable ifdef, so it doesn't make sense to compile it.<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Dec 18, 2019 at 2:09 PM Alberto Barbaro via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I have managed to compile libpng using wllvm and obtain the IR of pngpixel ( small tool which is part of libpng ).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">libpng has a function called png_check_IHDR:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">void /* PRIVATE */<br>
png_check_IHDR(png_const_structrp png_ptr,<br>
   png_uint_32 width, png_uint_32 height, int bit_depth,<br>
   int color_type, int interlace_type, int compression_type,<br>
   int filter_type)<br>
{<br>
   int error = 0;<br>
<br>
   /* Check for width and height valid values */<br>
   if (width == 0)<br>
   {<br>
      png_warning(png_ptr, "Image width is zero in IHDR");<br>
      error = 1;<br>
   }<br>
   else if (width > PNG_UINT_31_MAX)<br>
   {<br>
      png_warning(png_ptr, "Invalid image width in IHDR");<br>
      error = 1;<br>
   }<br>
  <b> else<br>
   {<br>
#     ifdef PNG_SET_USER_LIMITS_SUPPORTED<br>
      if (width > png_ptr->user_width_max)<br>
#     else<br>
      if (width > PNG_USER_WIDTH_MAX)<br>
#     endif<br>
      {<br>
         png_warning(png_ptr, "Image width exceeds user limit in IHDR");<br>
         error = 1;<br>
      }<br>
   }</b><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Unfortunately the relative IR does not seem to have the branch highlighted in bold:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">; Function Attrs: nounwind uwtable<br>
define void @png_check_IHDR(%struct.png_struct_def* noalias %png_ptr, i32 %width, i32 %height, i32 %bit_depth, i32 %color_type, i32 %interlace_type, i32 %compression_type, i32 %filter_type) #5 {<br>
  <b>%1 = icmp eq i32 %width, 0</b><br>
  br i1 %1, label %.thread, label %2<br>
<br>
.thread:                                          ; preds = %0<br>
  tail call void @png_warning(%struct.png_struct_def* %png_ptr, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str50, i64 0, i64 0)) #15<br>
  br label %5<br>
<br>
; <label>:2:                                      ; preds = %0<br>
  <b>%3 = icmp slt i32 %width, 0</b><br>
  br i1 %3, label %4, label %5<br>
<br>
; <label>:4:                                      ; preds = %2<br>
  tail call void @png_warning(%struct.png_struct_def* %png_ptr, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str51, i64 0, i64 0)) #15<br>
  br label %5<br>
<br>
; <label>:5:                                      ; preds = %4, %2, %.thread<br>
  %error.1 = phi i32 [ 1, %4 ], [ 0, %2 ], [ 1, %.thread ]<br>
  %6 = getelementptr inbounds %struct.png_struct_def, %struct.png_struct_def* %png_ptr, i64 0, i32 132<br>
  %7 = load i32, i32* %6, align 4, !tbaa !22<br>
  <b>%8 = icmp ult i32 %7, %width ; if (width > PNG_UINT_31_MAX)</b><br>
  br i1 %8, label %9, label %10<br>
<br>
; <label>:9:                                      ; preds = %5<br>
  tail call void @png_warning(%struct.png_struct_def* %png_ptr, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str53, i64 0, i64 0)) #15<br>
  br label %10<br>
<br>
; <label>:10:                                     ; preds = %9, %5<br>
  %error.3 = phi i32 [ 1, %9 ], [ %error.1, %5 ]<br>
  <b>%11 = icmp eq i32 %height, 0 ; first check on the height</b><br>
  br i1 %11, label %.thread27, label %12<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Does anybody know why the else branch is completely missing?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Alberto<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><u></u><u></u></p>
</blockquote>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>

</blockquote></div>