Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 1 | ; RUN: llc < %s -march=x86 -mattr=+sse2 | FileCheck %s |
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 2 | |
3 | define i32 @isint_return(double %d) nounwind { | ||||
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 4 | ; CHECK-NOT: xor |
5 | ; CHECK: cvt | ||||
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 6 | %i = fptosi double %d to i32 |
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 7 | ; CHECK-NEXT: cvt |
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 8 | %e = sitofp i32 %i to double |
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 9 | ; CHECK: cmpeqsd |
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 10 | %c = fcmp oeq double %d, %e |
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 11 | ; CHECK-NEXT: movd |
12 | ; CHECK-NEXT: andl | ||||
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 13 | %z = zext i1 %c to i32 |
14 | ret i32 %z | ||||
15 | } | ||||
16 | |||||
17 | declare void @foo() | ||||
18 | |||||
19 | define void @isint_branch(double %d) nounwind { | ||||
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 20 | ; CHECK: cvt |
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 21 | %i = fptosi double %d to i32 |
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 22 | ; CHECK-NEXT: cvt |
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 23 | %e = sitofp i32 %i to double |
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 24 | ; CHECK: ucomisd |
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 25 | %c = fcmp oeq double %d, %e |
Stuart Hastings | 865f093 | 2011-06-03 23:53:54 +0000 | [diff] [blame^] | 26 | ; CHECK-NEXT: jne |
27 | ; CHECK-NEXT: jp | ||||
Dan Gohman | 279c22e | 2008-10-21 03:29:32 +0000 | [diff] [blame] | 28 | br i1 %c, label %true, label %false |
29 | true: | ||||
30 | call void @foo() | ||||
31 | ret void | ||||
32 | false: | ||||
33 | ret void | ||||
34 | } |