-; RUN: llc < %s -march=x86-64 | grep lea | count 3
-; RUN: llc < %s -march=x86-64 | grep shl | count 1
-; RUN: llc < %s -march=x86-64 | not grep imul
+; RUN: llc < %s -march=x86-64 | FileCheck %s
+
+; CHECK-NOT: imul
define i64 @t1(i64 %a) nounwind readnone {
entry:
- %0 = mul i64 %a, 81 ; <i64> [#uses=1]
- ret i64 %0
+ %0 = mul i64 %a, 81
+; CHECK: lea
+; CHECK: lea
+ ret i64 %0
}
define i64 @t2(i64 %a) nounwind readnone {
entry:
- %0 = mul i64 %a, 40 ; <i64> [#uses=1]
- ret i64 %0
+ %0 = mul i64 %a, 40
+; CHECK: shl
+; CHECK: lea
+ ret i64 %0
}
-; RUN: llc < %s -march=x86 | grep lea
+; RUN: llc < %s -march=x86 | FileCheck %s
declare i32 @foo()
define i32 @test() {
- %tmp.0 = tail call i32 @foo( ) ; <i32> [#uses=1]
- %tmp.1 = mul i32 %tmp.0, 9 ; <i32> [#uses=1]
- ret i32 %tmp.1
+ %tmp.0 = tail call i32 @foo( )
+ %tmp.1 = mul i32 %tmp.0, 9
+; CHECK-NOT: mul
+; CHECK: lea
+ ret i32 %tmp.1
}
-; RUN: llc < %s -march=x86-64 | grep lea | count 2
+; RUN: llc < %s -march=x86-64 | FileCheck %s
define zeroext i16 @t1(i32 %on_off) nounwind {
entry:
- %0 = sub i32 %on_off, 1
- %1 = mul i32 %0, 2
- %2 = trunc i32 %1 to i16
- %3 = zext i16 %2 to i32
- %4 = trunc i32 %3 to i16
- ret i16 %4
+ %0 = sub i32 %on_off, 1
+ %1 = mul i32 %0, 2
+ %2 = trunc i32 %1 to i16
+ %3 = zext i16 %2 to i32
+ %4 = trunc i32 %3 to i16
+; CHECK: lea
+ ret i16 %4
}
define i32 @t2(i32 %on_off) nounwind {
entry:
- %0 = sub i32 %on_off, 1
- %1 = mul i32 %0, 2
- %2 = and i32 %1, 65535
- ret i32 %2
+ %0 = sub i32 %on_off, 1
+ %1 = mul i32 %0, 2
+ %2 = and i32 %1, 65535
+; CHECK: lea
+ ret i32 %2
}