From: David Tweed Date: Fri, 7 Dec 2012 15:57:45 +0000 (+0000) Subject: The test unconditionally assumes a particular cpu has a backend build in the target. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9f90c7341562bd667879b1aa0ab874da1856e7d0;p=oota-llvm.git The test unconditionally assumes a particular cpu has a backend build in the target. Buildbots for some hosts may choose to build only their own backend in order to maximise testing-turnaround time. Move the test into a prefixed directory so lit's standard "backend specific" suppression can be done. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169604 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/LoopIdiom/X86/lit.local.cfg b/test/Transforms/LoopIdiom/X86/lit.local.cfg new file mode 100644 index 00000000000..a8ad0f1a28b --- /dev/null +++ b/test/Transforms/LoopIdiom/X86/lit.local.cfg @@ -0,0 +1,6 @@ +config.suffixes = ['.ll', '.c', '.cpp'] + +targets = set(config.root.targets_to_build.split()) +if not 'X86' in targets: + config.unsupported = True + diff --git a/test/Transforms/LoopIdiom/X86/popcnt.ll b/test/Transforms/LoopIdiom/X86/popcnt.ll new file mode 100644 index 00000000000..039af8024d3 --- /dev/null +++ b/test/Transforms/LoopIdiom/X86/popcnt.ll @@ -0,0 +1,76 @@ +; RUN: opt -loop-idiom < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -S | FileCheck %s + +;To recognize this pattern: +;int popcount(unsigned long long a) { +; int c = 0; +; while (a) { +; c++; +; a &= a - 1; +; } +; return c; +;} +; +; CHECK: entry +; CHECK: llvm.ctpop.i64 +; CHECK: ret +define i32 @popcount(i64 %a) nounwind uwtable readnone ssp { +entry: + %tobool3 = icmp eq i64 %a, 0 + br i1 %tobool3, label %while.end, label %while.body + +while.body: ; preds = %entry, %while.body + %c.05 = phi i32 [ %inc, %while.body ], [ 0, %entry ] + %a.addr.04 = phi i64 [ %and, %while.body ], [ %a, %entry ] + %inc = add nsw i32 %c.05, 1 + %sub = add i64 %a.addr.04, -1 + %and = and i64 %sub, %a.addr.04 + %tobool = icmp eq i64 %and, 0 + br i1 %tobool, label %while.end, label %while.body + +while.end: ; preds = %while.body, %entry + %c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ] + ret i32 %c.0.lcssa +} + +; To recognize this pattern: +;int popcount(unsigned long long a, int mydata1, int mydata2) { +; int c = 0; +; while (a) { +; c++; +; a &= a - 1; +; mydata1 *= c; +; mydata2 *= (int)a; +; } +; return c + mydata1 + mydata2; +;} +; CHECK: entry +; CHECK: llvm.ctpop.i64 +; CHECK: ret +define i32 @popcount2(i64 %a, i32 %mydata1, i32 %mydata2) nounwind uwtable readnone ssp { +entry: + %tobool9 = icmp eq i64 %a, 0 + br i1 %tobool9, label %while.end, label %while.body + +while.body: ; preds = %entry, %while.body + %c.013 = phi i32 [ %inc, %while.body ], [ 0, %entry ] + %mydata2.addr.012 = phi i32 [ %mul1, %while.body ], [ %mydata2, %entry ] + %mydata1.addr.011 = phi i32 [ %mul, %while.body ], [ %mydata1, %entry ] + %a.addr.010 = phi i64 [ %and, %while.body ], [ %a, %entry ] + %inc = add nsw i32 %c.013, 1 + %sub = add i64 %a.addr.010, -1 + %and = and i64 %sub, %a.addr.010 + %mul = mul nsw i32 %inc, %mydata1.addr.011 + %conv = trunc i64 %and to i32 + %mul1 = mul nsw i32 %conv, %mydata2.addr.012 + %tobool = icmp eq i64 %and, 0 + br i1 %tobool, label %while.end, label %while.body + +while.end: ; preds = %while.body, %entry + %c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ] + %mydata2.addr.0.lcssa = phi i32 [ %mydata2, %entry ], [ %mul1, %while.body ] + %mydata1.addr.0.lcssa = phi i32 [ %mydata1, %entry ], [ %mul, %while.body ] + %add = add i32 %mydata2.addr.0.lcssa, %mydata1.addr.0.lcssa + %add2 = add i32 %add, %c.0.lcssa + ret i32 %add2 +} + diff --git a/test/Transforms/LoopIdiom/popcnt.ll b/test/Transforms/LoopIdiom/popcnt.ll deleted file mode 100644 index 039af8024d3..00000000000 --- a/test/Transforms/LoopIdiom/popcnt.ll +++ /dev/null @@ -1,76 +0,0 @@ -; RUN: opt -loop-idiom < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -S | FileCheck %s - -;To recognize this pattern: -;int popcount(unsigned long long a) { -; int c = 0; -; while (a) { -; c++; -; a &= a - 1; -; } -; return c; -;} -; -; CHECK: entry -; CHECK: llvm.ctpop.i64 -; CHECK: ret -define i32 @popcount(i64 %a) nounwind uwtable readnone ssp { -entry: - %tobool3 = icmp eq i64 %a, 0 - br i1 %tobool3, label %while.end, label %while.body - -while.body: ; preds = %entry, %while.body - %c.05 = phi i32 [ %inc, %while.body ], [ 0, %entry ] - %a.addr.04 = phi i64 [ %and, %while.body ], [ %a, %entry ] - %inc = add nsw i32 %c.05, 1 - %sub = add i64 %a.addr.04, -1 - %and = and i64 %sub, %a.addr.04 - %tobool = icmp eq i64 %and, 0 - br i1 %tobool, label %while.end, label %while.body - -while.end: ; preds = %while.body, %entry - %c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ] - ret i32 %c.0.lcssa -} - -; To recognize this pattern: -;int popcount(unsigned long long a, int mydata1, int mydata2) { -; int c = 0; -; while (a) { -; c++; -; a &= a - 1; -; mydata1 *= c; -; mydata2 *= (int)a; -; } -; return c + mydata1 + mydata2; -;} -; CHECK: entry -; CHECK: llvm.ctpop.i64 -; CHECK: ret -define i32 @popcount2(i64 %a, i32 %mydata1, i32 %mydata2) nounwind uwtable readnone ssp { -entry: - %tobool9 = icmp eq i64 %a, 0 - br i1 %tobool9, label %while.end, label %while.body - -while.body: ; preds = %entry, %while.body - %c.013 = phi i32 [ %inc, %while.body ], [ 0, %entry ] - %mydata2.addr.012 = phi i32 [ %mul1, %while.body ], [ %mydata2, %entry ] - %mydata1.addr.011 = phi i32 [ %mul, %while.body ], [ %mydata1, %entry ] - %a.addr.010 = phi i64 [ %and, %while.body ], [ %a, %entry ] - %inc = add nsw i32 %c.013, 1 - %sub = add i64 %a.addr.010, -1 - %and = and i64 %sub, %a.addr.010 - %mul = mul nsw i32 %inc, %mydata1.addr.011 - %conv = trunc i64 %and to i32 - %mul1 = mul nsw i32 %conv, %mydata2.addr.012 - %tobool = icmp eq i64 %and, 0 - br i1 %tobool, label %while.end, label %while.body - -while.end: ; preds = %while.body, %entry - %c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ] - %mydata2.addr.0.lcssa = phi i32 [ %mydata2, %entry ], [ %mul1, %while.body ] - %mydata1.addr.0.lcssa = phi i32 [ %mydata1, %entry ], [ %mul, %while.body ] - %add = add i32 %mydata2.addr.0.lcssa, %mydata1.addr.0.lcssa - %add2 = add i32 %add, %c.0.lcssa - ret i32 %add2 -} -