| ; 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 |
| } |