66 lines
1.7 KiB
LLVM
66 lines
1.7 KiB
LLVM
|
; RUN: opt < %s -bounds-checking -S | FileCheck %s
|
||
|
@array = internal global [1819 x i16] zeroinitializer, section ".bss,bss"
|
||
|
@offsets = external dso_local global [10 x i16]
|
||
|
|
||
|
; CHECK-LABEL: @test
|
||
|
define dso_local void @test() {
|
||
|
bb1:
|
||
|
br label %bb19
|
||
|
|
||
|
bb20:
|
||
|
%_tmp819 = load i16, i16* null
|
||
|
; CHECK: br {{.*}} %trap
|
||
|
%_tmp820 = sub nsw i16 9, %_tmp819
|
||
|
%_tmp821 = sext i16 %_tmp820 to i64
|
||
|
%_tmp822 = getelementptr [10 x i16], [10 x i16]* @offsets, i16 0, i64 %_tmp821
|
||
|
%_tmp823 = load i16, i16* %_tmp822
|
||
|
br label %bb33
|
||
|
|
||
|
bb34:
|
||
|
%_tmp907 = zext i16 %i__7.107.0 to i64
|
||
|
%_tmp908 = getelementptr [1819 x i16], [1819 x i16]* @array, i16 0, i64 %_tmp907
|
||
|
store i16 0, i16* %_tmp908
|
||
|
; CHECK: br {{.*}} %trap
|
||
|
%_tmp910 = add i16 %i__7.107.0, 1
|
||
|
br label %bb33
|
||
|
|
||
|
bb33:
|
||
|
%i__7.107.0 = phi i16 [ undef, %bb20 ], [ %_tmp910, %bb34 ]
|
||
|
%_tmp913 = add i16 %_tmp823, 191
|
||
|
%_tmp914 = icmp ult i16 %i__7.107.0, %_tmp913
|
||
|
br i1 %_tmp914, label %bb34, label %bb19
|
||
|
|
||
|
bb19:
|
||
|
%_tmp976 = icmp slt i16 0, 10
|
||
|
br i1 %_tmp976, label %bb20, label %bb39
|
||
|
|
||
|
bb39:
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
@e = dso_local local_unnamed_addr global [1 x i16] zeroinitializer, align 1
|
||
|
|
||
|
; CHECK-LABEL: @test2
|
||
|
define dso_local void @test2() local_unnamed_addr {
|
||
|
entry:
|
||
|
br label %while.cond1.preheader
|
||
|
|
||
|
while.cond1.preheader:
|
||
|
%0 = phi i16 [ undef, %entry ], [ %inc, %while.end ]
|
||
|
%1 = load i16, i16* undef, align 1
|
||
|
; CHECK: br {{.*}} %trap
|
||
|
br label %while.end
|
||
|
|
||
|
while.end:
|
||
|
%inc = add nsw i16 %0, 1
|
||
|
%arrayidx = getelementptr inbounds [1 x i16], [1 x i16]* @e, i16 0, i16
|
||
|
%0
|
||
|
%2 = load i16, i16* %arrayidx, align 1
|
||
|
; CHECK: or i1
|
||
|
; CHECK-NEXT: br {{.*}} %trap
|
||
|
br i1 false, label %while.end6, label %while.cond1.preheader
|
||
|
|
||
|
while.end6:
|
||
|
ret void
|
||
|
}
|