Let callers decide the sub-register index on the def operand of rematerialized instru...
[oota-llvm.git] / test / CodeGen / X86 / 2008-08-23-X86-64AsmBug.ll
1 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin | grep movq
2 ; PR2677
3
4 ; FIXME: llvm-as < %s | llc -mtriple=x86_64-apple-darwin | grep movd | count 1
5 ; We now no longer allow instruction whose def has a sub-reg index to be
6 ; rematerialized.
7
8
9         %struct.Bigint = type { %struct.Bigint*, i32, i32, i32, i32, [1 x i32] }
10
11 define double @_Z7qstrtodPKcPS0_Pb(i8* %s00, i8** %se, i8* %ok) nounwind {
12 entry:
13         br i1 false, label %bb151, label %bb163
14
15 bb151:          ; preds = %entry
16         br label %bb163
17
18 bb163:          ; preds = %bb151, %entry
19         %tmp366 = load double* null, align 8            ; <double> [#uses=1]
20         %tmp368 = fmul double %tmp366, 0.000000e+00             ; <double> [#uses=1]
21         %tmp368226 = bitcast double %tmp368 to i64              ; <i64> [#uses=1]
22         br label %bb5.i
23
24 bb5.i:          ; preds = %bb5.i57.i, %bb163
25         %b.0.i = phi %struct.Bigint* [ null, %bb163 ], [ %tmp9.i.i41.i, %bb5.i57.i ]            ; <%struct.Bigint*> [#uses=1]
26         %tmp3.i7.i728 = load i32* null, align 4         ; <i32> [#uses=1]
27         br label %bb.i27.i
28
29 bb.i27.i:               ; preds = %bb.i27.i, %bb5.i
30         %tmp23.i20.i = lshr i32 0, 16           ; <i32> [#uses=1]
31         br i1 false, label %bb.i27.i, label %bb5.i57.i
32
33 bb5.i57.i:              ; preds = %bb.i27.i
34         %tmp50.i35.i = load i32* null, align 4          ; <i32> [#uses=1]
35         %tmp51.i36.i = add i32 %tmp50.i35.i, 1          ; <i32> [#uses=2]
36         %tmp2.i.i37.i = shl i32 1, %tmp51.i36.i         ; <i32> [#uses=2]
37         %tmp4.i.i38.i = shl i32 %tmp2.i.i37.i, 2                ; <i32> [#uses=1]
38         %tmp7.i.i39.i = add i32 %tmp4.i.i38.i, 28               ; <i32> [#uses=1]
39         %tmp8.i.i40.i = malloc i8, i32 %tmp7.i.i39.i            ; <i8*> [#uses=1]
40         %tmp9.i.i41.i = bitcast i8* %tmp8.i.i40.i to %struct.Bigint*            ; <%struct.Bigint*> [#uses=2]
41         store i32 %tmp51.i36.i, i32* null, align 8
42         store i32 %tmp2.i.i37.i, i32* null, align 4
43         free %struct.Bigint* %b.0.i
44         store i32 %tmp23.i20.i, i32* null, align 4
45         %tmp74.i61.i = add i32 %tmp3.i7.i728, 1         ; <i32> [#uses=1]
46         store i32 %tmp74.i61.i, i32* null, align 4
47         br i1 false, label %bb5.i, label %bb7.i
48
49 bb7.i:          ; preds = %bb5.i57.i
50         %tmp514 = load i32* null, align 4               ; <i32> [#uses=1]
51         %tmp515 = sext i32 %tmp514 to i64               ; <i64> [#uses=1]
52         %tmp516 = shl i64 %tmp515, 2            ; <i64> [#uses=1]
53         %tmp517 = add i64 %tmp516, 8            ; <i64> [#uses=1]
54         %tmp519 = getelementptr %struct.Bigint* %tmp9.i.i41.i, i32 0, i32 3             ; <i32*> [#uses=1]
55         %tmp523 = bitcast i32* %tmp519 to i8*           ; <i8*> [#uses=1]
56         call void @llvm.memcpy.i64( i8* null, i8* %tmp523, i64 %tmp517, i32 1 )
57         %tmp524136 = bitcast i64 %tmp368226 to double           ; <double> [#uses=1]
58         store double %tmp524136, double* null
59         unreachable
60 }
61
62 declare void @llvm.memcpy.i64(i8*, i8*, i64, i32) nounwind