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