197ff2fdef6ec2054d883a1e9b1971f1ea37f631
[oota-llvm.git] / test / CodeGen / Generic / 2003-07-06-BadIntCmp.ll
1 ; RUN: llvm-as -f %s -o - | llc
2
3 ;; Date: May 28, 2003.
4 ;; From: test/Programs/MultiSource/Olden-perimeter/maketree.c
5 ;; Function: int CheckOutside(int x, int y)
6 ;; 
7 ;; Note: The .ll code below for this regression test has identical
8 ;;       behavior to the above function up to the error, but then prints
9 ;;       true/false on the two branches.
10 ;; 
11 ;; Error: llc generates a branch-on-xcc instead of branch-on-icc, which
12 ;;        is wrong because the value being compared (int euclid = x*x + y*y)
13 ;;        overflows, so that the 64-bit and 32-bit compares are not equal.
14 ;; 
15 ;; LLC Output:
16 ;; 
17 ;; !****** Outputing Function: CheckOutside_34 ******
18 ;;         .align  4
19 ;;         .global CheckOutside_34
20 ;;         .type   CheckOutside_34, 2
21 ;; CheckOutside_34:
22 ;; .L_CheckOutside_34_LL_0:
23 ;;         save    %o6, -192, %o6
24 ;;         mulx    %i1, %i1, %i1
25 ;;         mulx    %i0, %i0, %i0
26 ;;         sethi   %lm(4194304), %o1
27 ;;         or      %g0, 1, %o0
28 ;;         add     %i0, %i1, %i0
29 ;;         sra     %o1, 0, %o1
30 ;;         subcc   %i0, %o1, %g0
31 ;;         bg      %xcc, .L_CheckOutside_34_LL_3
32 ;;         nop     
33 ;;         ba      .L_CheckOutside_34_LL_1
34 ;;         nop     
35 ;; ...
36 ;; 
37 ;;
38
39
40 target endian = little
41 target pointersize = 32
42 %.str_1 = internal constant [6 x sbyte] c"true\0A\00"           ; <[6 x sbyte]*> [#uses=1]
43 %.str_2 = internal constant [7 x sbyte] c"false\0A\00"          ; <[7 x sbyte]*> [#uses=1]
44
45 implementation   ; Functions:
46
47 declare int %printf(sbyte*, ...)
48
49 internal void %__main() {
50 entry:          ; No predecessors!
51         ret void
52 }
53
54 internal void %CheckOutside(int %x.1, int %y.1) {
55 entry:          ; No predecessors!
56         %tmp.2 = mul int %x.1, %x.1             ; <int> [#uses=1]
57         %tmp.5 = mul int %y.1, %y.1             ; <int> [#uses=1]
58         %tmp.6 = add int %tmp.2, %tmp.5         ; <int> [#uses=1]
59         %tmp.8 = setle int %tmp.6, 4194304              ; <bool> [#uses=1]
60         br bool %tmp.8, label %then, label %else
61
62 then:           ; preds = %entry
63         %tmp.11 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([6 x sbyte]* %.str_1, long 0, long 0) )                ; <int> [#uses=0]
64         br label %UnifiedExitNode
65
66 else:           ; preds = %entry
67         %tmp.13 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([7 x sbyte]* %.str_2, long 0, long 0) )                ; <int> [#uses=0]
68         br label %UnifiedExitNode
69
70 UnifiedExitNode:                ; preds = %then, %else
71         ret void
72 }
73
74 int %main() {
75 entry:          ; No predecessors!
76         call void %__main( )
77         call void %CheckOutside( int 2097152, int 2097152 )
78         ret int 0
79 }