Previously left these behind due to the required instruction renumbering, drop them now. This more accurately represents opaque pointer input IR. Also drop duplicate opaque pointer check lines in one SROA test.
71 lines
2.5 KiB
LLVM
71 lines
2.5 KiB
LLVM
; NOTE: This is a timeout test for some O(something silly) constant folding behaviour. It may not be the best test. Providing it finishes, it passes.
|
|
; RUN: opt < %s -O3 -S | FileCheck %s
|
|
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
|
target triple = "armv8-none-eabi"
|
|
|
|
%struct.ST = type { ptr }
|
|
|
|
@global = internal global [121 x i8] zeroinitializer, align 1
|
|
|
|
define void @func() #0 {
|
|
;CHECK-LABEL: func
|
|
entry:
|
|
%s = alloca ptr, align 4
|
|
%j = alloca i32, align 4
|
|
store ptr @global, ptr %s, align 4
|
|
store i32 0, ptr %j, align 4
|
|
br label %for.cond
|
|
|
|
for.cond: ; preds = %for.inc, %entry
|
|
%0 = load i32, ptr %j, align 4
|
|
%cmp = icmp slt i32 %0, 30
|
|
br i1 %cmp, label %for.body, label %for.end
|
|
|
|
for.body: ; preds = %for.cond
|
|
%1 = load ptr, ptr %s, align 4
|
|
%add.ptr = getelementptr inbounds i8, ptr %1, i32 4
|
|
%2 = ptrtoint ptr %add.ptr to i32
|
|
%3 = load ptr, ptr %s, align 4
|
|
%add.ptr1 = getelementptr inbounds i8, ptr %3, i32 4
|
|
%4 = ptrtoint ptr %add.ptr1 to i32
|
|
%rem = urem i32 %4, 2
|
|
%cmp2 = icmp eq i32 %rem, 0
|
|
br i1 %cmp2, label %cond.true, label %cond.false
|
|
|
|
cond.true: ; preds = %for.body
|
|
br label %cond.end
|
|
|
|
cond.false: ; preds = %for.body
|
|
%5 = load ptr, ptr %s, align 4
|
|
%add.ptr3 = getelementptr inbounds i8, ptr %5, i32 4
|
|
%6 = ptrtoint ptr %add.ptr3 to i32
|
|
%rem4 = urem i32 %6, 2
|
|
br label %cond.end
|
|
|
|
cond.end: ; preds = %cond.false, %cond.true
|
|
%cond = phi i32 [ 0, %cond.true ], [ %rem4, %cond.false ]
|
|
%add = add i32 %2, %cond
|
|
%7 = inttoptr i32 %add to ptr
|
|
%8 = load ptr, ptr %s, align 4
|
|
%next = getelementptr inbounds %struct.ST, ptr %8, i32 0, i32 0
|
|
store ptr %7, ptr %next, align 4
|
|
%9 = load ptr, ptr %s, align 4
|
|
%next5 = getelementptr inbounds %struct.ST, ptr %9, i32 0, i32 0
|
|
%10 = load ptr, ptr %next5, align 4
|
|
store ptr %10, ptr %s, align 4
|
|
br label %for.inc
|
|
|
|
for.inc: ; preds = %cond.end
|
|
%11 = load i32, ptr %j, align 4
|
|
%inc = add nsw i32 %11, 1
|
|
store i32 %inc, ptr %j, align 4
|
|
br label %for.cond
|
|
|
|
for.end: ; preds = %for.cond
|
|
%12 = load ptr, ptr %s, align 4
|
|
%next6 = getelementptr inbounds %struct.ST, ptr %12, i32 0, i32 0
|
|
store ptr null, ptr %next6, align 4
|
|
ret void
|
|
}
|
|
|