blob: 652a000fd7aa84eb747a1da9654f6eae3bdd5e1c [file] [log] [blame]
Krzysztof Parzyszekd91a9e22018-08-02 22:17:53 +00001; RUN: llc -march=hexagon -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
Krzysztof Parzyszek4773f642016-04-26 18:36:34 +00002; REQUIRES: asserts
3
4; When tail-duplicating a block with PHI nodes that use subregisters, the
5; subregisters were dropped by the tail duplicator, resulting in invalid
6; COPY instructions being generated.
7
Sanjay Patel014c0002018-02-12 21:37:27 +00008; CHECK: = asl(r{{[0-9]+}}:{{[0-9]+}},#15)
Krzysztof Parzyszek4773f642016-04-26 18:36:34 +00009
10target triple = "hexagon"
11
12%struct.0 = type { i64, i16 }
13%struct.1 = type { i64, i64 }
14
15declare hidden fastcc void @foo(%struct.0* noalias nocapture, i8 signext, i8 zeroext, i32, i64, i64) unnamed_addr #0
16
17define void @fred(%struct.0* noalias nocapture sret %agg.result, %struct.1* byval nocapture readonly align 8 %a) #1 {
18entry:
19 %0 = load i64, i64* undef, align 8
20 switch i32 undef, label %if.else [
21 i32 32767, label %if.then
22 i32 0, label %if.then7
23 ]
24
25if.then: ; preds = %entry
26 ret void
27
28if.then7: ; preds = %entry
29 br i1 undef, label %if.then.i, label %if.else16.i
30
31if.then.i: ; preds = %if.then7
32 br i1 undef, label %if.then5.i, label %if.else.i
33
34if.then5.i: ; preds = %if.then.i
35 %shl.i21 = shl i64 %0, 0
36 br label %if.end.i
37
38if.else.i: ; preds = %if.then.i
Sanjay Patel014c0002018-02-12 21:37:27 +000039 %shl12.i = shl i64 %0, 7
Krzysztof Parzyszek4773f642016-04-26 18:36:34 +000040 br label %if.end.i
41
42if.end.i: ; preds = %if.else.i, %if.then5.i
43 %aSig0.0 = phi i64 [ undef, %if.then5.i ], [ %shl12.i, %if.else.i ]
44 %storemerge43.i = phi i64 [ %shl.i21, %if.then5.i ], [ 0, %if.else.i ]
Sanjay Patel014c0002018-02-12 21:37:27 +000045 %sub15.i = sub nsw i32 -63, 8
Krzysztof Parzyszek4773f642016-04-26 18:36:34 +000046 br label %if.end13
47
48if.else16.i: ; preds = %if.then7
49 br label %if.end13
50
51if.else: ; preds = %entry
Sanjay Patel014c0002018-02-12 21:37:27 +000052 %or12 = or i64 9, 281474976710656
Krzysztof Parzyszek4773f642016-04-26 18:36:34 +000053 br label %if.end13
54
55if.end13: ; preds = %if.else, %if.else16.i, %if.end.i
56 %aSig1.1 = phi i64 [ %0, %if.else ], [ %storemerge43.i, %if.end.i ], [ undef, %if.else16.i ]
57 %aSig0.2 = phi i64 [ %or12, %if.else ], [ %aSig0.0, %if.end.i ], [ undef, %if.else16.i ]
58 %aExp.0 = phi i32 [ undef, %if.else ], [ %sub15.i, %if.end.i ], [ undef, %if.else16.i ]
59 %shl2.i = shl i64 %aSig0.2, 15
60 %shr.i = lshr i64 %aSig1.1, 49
61 %or.i = or i64 %shl2.i, %shr.i
62 tail call fastcc void @foo(%struct.0* noalias %agg.result, i8 signext 80, i8 zeroext undef, i32 %aExp.0, i64 %or.i, i64 undef)
63 unreachable
64}
65
66attributes #0 = { norecurse nounwind }
67attributes #1 = { nounwind }