From a3d7df6fee322f2276ddc841c2d2e291be79680c Mon Sep 17 00:00:00 2001 From: Preston Gurd Date: Wed, 3 Oct 2012 16:37:56 +0000 Subject: [PATCH] Adds a test to verify that Clang does the optimization to use a fast div/rem instruction (for Intel Atom). Test case for llvm commit 165126. Patch by Tyler Nowicki. llvm-svn: 165129 --- clang/test/CodeGen/atom-idiv-bypass.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 clang/test/CodeGen/atom-idiv-bypass.c diff --git a/clang/test/CodeGen/atom-idiv-bypass.c b/clang/test/CodeGen/atom-idiv-bypass.c new file mode 100644 index 0000000..596e18b --- /dev/null +++ b/clang/test/CodeGen/atom-idiv-bypass.c @@ -0,0 +1,32 @@ +// This test verifies that IDIV bypass optimizations is used when compiling for +// Atom processors with O2. The optimization inserts a test followed by a +// branch to bypass the slow IDIV instruction. This test verifies that global +// context types are used when comparing with those in the BypassTypeMap. + +// RUN: %clang_cc1 %s -march=atom -m32 -O2 -S -o - | FileCheck %s +// CHECK: div32 +// CHECK: orl +// CHECK: testl +// CHECK: je +// CHECK: idivl +// CHECK: ret +// CHECK: divb +// CHECK: ret +int div32(int a, int b) +{ + return a/b; +} + +// CHECK: divrem32 +// CHECK: orl +// CHECK: testl +// CHECK: je +// CHECK: idivl +// CHECK: jmp +// CHECK: divb +// CHECK: addl +// CHECK: ret +int divrem32(int a, int b) +{ + return a/b + a%b; +} -- 2.7.4