<div dir="ltr">"No IR tests were added with rL304313"  - that was wrong. <br><br>I missed the last test file in the commit which included IR tests for llc. <br><br>But we need more coverage than that because I've made at least 3 functional changes to the code and none of those tests wiggled.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 8, 2017 at 2:40 PM, Sanjay Patel via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: spatel<br>
Date: Thu Jun  8 15:40:39 2017<br>
New Revision: 305011<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=305011&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=305011&view=rev</a><br>
Log:<br>
[CGP, x86] add tests for potential memcmp expansion; NFC<br>
<br>
No IR tests were added with rL304313 ( <a href="https://reviews.llvm.org/D28637" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D28637</a> ),<br>
so I want these for extra coverage if we enable memcmp expansion for x86.<br>
As shown, nothing is expanded for x86 in CGP yet.<br>
<br>
Also fundamentally, we're doing an IR transform, so we should have IR tests<br>
for just that part. If something goes wrong, we need to know if the bug is<br>
in CGP or later lowering.<br>
<br>
<br>
Added:<br>
    llvm/trunk/test/Transforms/<wbr>CodeGenPrepare/X86/memcmp.ll<br>
<br>
Added: llvm/trunk/test/Transforms/<wbr>CodeGenPrepare/X86/memcmp.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CodeGenPrepare/X86/memcmp.ll?rev=305011&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/CodeGenPrepare/X86/<wbr>memcmp.ll?rev=305011&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>CodeGenPrepare/X86/memcmp.ll (added)<br>
+++ llvm/trunk/test/Transforms/<wbr>CodeGenPrepare/X86/memcmp.ll Thu Jun  8 15:40:39 2017<br>
@@ -0,0 +1,337 @@<br>
+; RUN: opt -S -codegenprepare -mtriple=i686-unknown-unknown < %s   | FileCheck %s --check-prefix=ALL --check-prefix=X32<br>
+; RUN: opt -S -codegenprepare -mtriple=x86_64-unknown-<wbr>unknown < %s | FileCheck %s --check-prefix=ALL --check-prefix=X64<br>
+<br>
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
+<br>
+declare i32 @memcmp(i8* nocapture, i8* nocapture, i64)<br>
+<br>
+define i32 @cmp2(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp2(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 2)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 2)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp3(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp3(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 3)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 3)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp4(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp4(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 4)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 4)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp5(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp5(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 5)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 5)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp6(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp6(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 6)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 6)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp7(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp7(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 7)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 7)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp8(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp8(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 8)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 8)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp9(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp9(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 9)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 9)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp10(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp10(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 10)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 10)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp11(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp11(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 11)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 11)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp12(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp12(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 12)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 12)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp13(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp13(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 13)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 13)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp14(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp14(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 14)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 14)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp15(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp15(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 15)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 15)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp16(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp16(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 16)<br>
+; ALL-NEXT:    ret i32 [[CALL]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 16)<br>
+  ret i32 %call<br>
+}<br>
+<br>
+define i32 @cmp_eq2(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq2(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 2)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 2)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq3(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq3(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 3)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 3)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq4(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq4(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 4)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 4)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq5(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq5(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 5)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 5)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq6(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq6(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 6)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 6)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq7(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq7(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 7)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 7)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq8(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq8(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 8)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 8)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq9(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq9(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 9)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 9)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq10(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq10(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 10)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 10)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq11(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq11(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 11)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 11)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq12(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq12(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 12)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 12)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq13(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq13(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 13)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 13)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq14(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq14(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 14)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 14)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq15(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq15(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 15)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 15)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
+define i32 @cmp_eq16(i8* nocapture readonly %x, i8* nocapture readonly %y)  {<br>
+; ALL-LABEL: @cmp_eq16(<br>
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* %x, i8* %y, i64 16)<br>
+; ALL-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0<br>
+; ALL-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i32<br>
+; ALL-NEXT:    ret i32 [[CONV]]<br>
+;<br>
+  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 16)<br>
+  %cmp = icmp eq i32 %call, 0<br>
+  %conv = zext i1 %cmp to i32<br>
+  ret i32 %conv<br>
+}<br>
+<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>