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 |
Jakob Stoklund Olesen | f805a7c | 2011-11-15 07:13:03 +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 |
Jakob Stoklund Olesen | f805a7c | 2011-11-15 07:13:03 +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 | } |