|
| 1 | +; RUN: opt -passes=gvn-sink -S %s | FileCheck %s |
| 2 | + |
| 3 | +target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" |
| 4 | +target triple = "thumbv7em-none-unknown-eabi" |
| 5 | + |
| 6 | +%"struct.std::pair" = type <{ i32, %struct.substruct, [2 x i8] }> |
| 7 | +%struct.substruct = type { i8, i8 } |
| 8 | +%"struct.std::random_access_iterator_tag" = type { i8 } |
| 9 | + |
| 10 | +; CHECK: if.end6 |
| 11 | +; CHECK: %incdec.ptr.sink = phi ptr [ %incdec.ptr, %if.then ], [ %incdec.ptr4, %if.then3 ], [ %add.ptr, %if.else5 ] |
| 12 | +; CHECK-NEXT: store ptr %incdec.ptr.sink, ptr %__i, align 4 |
| 13 | + |
| 14 | +define linkonce_odr dso_local void @__advance(ptr noundef nonnull align 4 dereferenceable(4) %__i, i32 noundef %__n) local_unnamed_addr { |
| 15 | +entry: |
| 16 | + %0 = call i1 @llvm.is.constant.i32(i32 %__n) |
| 17 | + %cmp = icmp eq i32 %__n, 1 |
| 18 | + %or.cond = and i1 %0, %cmp |
| 19 | + br i1 %or.cond, label %if.then, label %if.else |
| 20 | + |
| 21 | +if.then: ; preds = %entry |
| 22 | + %1 = load ptr, ptr %__i, align 4 |
| 23 | + %incdec.ptr = getelementptr inbounds i8, ptr %1, i32 8 |
| 24 | + store ptr %incdec.ptr, ptr %__i, align 4 |
| 25 | + br label %if.end6 |
| 26 | + |
| 27 | +if.else: ; preds = %entry |
| 28 | + %2 = call i1 @llvm.is.constant.i32(i32 %__n) |
| 29 | + %cmp2 = icmp eq i32 %__n, -1 |
| 30 | + %or.cond7 = and i1 %2, %cmp2 |
| 31 | + br i1 %or.cond7, label %if.then3, label %if.else5 |
| 32 | + |
| 33 | +if.then3: ; preds = %if.else |
| 34 | + %3 = load ptr, ptr %__i, align 4 |
| 35 | + %incdec.ptr4 = getelementptr inbounds i8, ptr %3, i32 -8 |
| 36 | + store ptr %incdec.ptr4, ptr %__i, align 4 |
| 37 | + br label %if.end6 |
| 38 | + |
| 39 | +if.else5: ; preds = %if.else |
| 40 | + %4 = load ptr, ptr %__i, align 4 |
| 41 | + %add.ptr = getelementptr inbounds %"struct.std::pair", ptr %4, i32 %__n |
| 42 | + store ptr %add.ptr, ptr %__i, align 4 |
| 43 | + br label %if.end6 |
| 44 | + |
| 45 | +if.end6: ; preds = %if.then3, %if.else5, %if.then |
| 46 | + ret void |
| 47 | +} |
0 commit comments