<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 5, 2014 at 10:35 AM, Sanjay Patel <span dir="ltr"><<a href="mailto:spatel@rotateright.com" target="_blank">spatel@rotateright.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":anl" class="a3s" style="overflow:hidden"> ; PR20354: when generating code for a vector <span class="il">fabs</span> op,<br>

-; make sure the correct mask is used for all vector elements.<br>
-; CHECK-LABEL: .LCPI4_0:<br>
-; CHECK-NEXT:    .long 2147483647<br>
-; CHECK-NEXT:    .long 2147483647<br>
-define i64 @fabs_v2f32(<2 x float> %v) {<br>
-; CHECK-LABEL: fabs_v2f32:<br>
-; CHECK:         movabsq $-9223372034707292160, %[[R:r[^ ]+]]<br>
-; CHECK-NEXT:    vmovq %[[R]], %[[X:xmm[0-9]+]]<br>
-; CHECK-NEXT:    vandps   {{.*}}.LCPI4_0{{.*}}, %[[X]], %[[X]]<br>
-; CHECK-NEXT:    vmovq   %[[X]], %rax<br>
-; CHECK-NEXT:    retq<br>
-  %highbits = bitcast i64 9223372039002259456 to <2 x float> ; 0x8000_0000_8000_0000<br>
-  %<span class="il">fabs</span> = call <2 x float> @llvm.<span class="il">fabs</span>.v2f32(<2 x float> %highbits)<br>
-  %ret = bitcast <2 x float> %<span class="il">fabs</span> to i64<br>
-  ret i64 %ret<br>
+; make sure that we're only turning off the sign bit of each float value.<br>
+; No constant pool loads or vector ops are needed for the <span class="il">fabs</span> of a<br>
+; bitcasted integer constant; we should just return an integer constant<br>
+; that has the sign bits turned off.<br>
+;<br>
+; So instead of something like this:<br>
+;    movabsq (constant pool load of mask for sign bits)<br>
+;    vmovq   (move from integer register to vector/fp register)<br>
+;    vandps  (mask off sign bits)<br>
+;    vmovq   (move vector/fp register back to integer return register)<br>
+;<br>
+; We should generate:<br>
+;    mov     (put constant value in return register)<br>
+<br>
+; CHECK-LABEL: fabs_v2f32_1<br>
+define i64 @fabs_v2f32_1() {<br>
+ %bitcast = bitcast i64 18446744069414584320 to <2 x float> ; 0xFFFF_FFFF_0000_0000<br>
+ %<span class="il">fabs</span> = call <2 x float> @llvm.<span class="il">fabs</span>.v2f32(<2 x float> %bitcast)<br>
+ %ret = bitcast <2 x float> %<span class="il">fabs</span> to i64<br>
+ ret i64 %ret<br>
+; CHECK: movabsq $9223372032559808512, %rax<br>
+;  # imm = 0x7FFF_FFFF_0000_0000<br>
+}</div></blockquote></div><br>I would strongly prefer that you follow the style of FileCheck patterns I used. Specifically, please check the entire sequence of instructions.</div><div class="gmail_extra"><br></div><div class="gmail_extra">
Also, rather than the weird '# imm' comment, I think we should just check the verbose asm comment that produces the readable hex form. Using FileCheck against the verbose asm comments just leads to more readable and maintainable tests, even if its good to not always rely on them (in case they contain a bug somehow).</div>
</div>