| Index: test/NaCl/Bitcode/bccompress.ll
|
| diff --git a/test/NaCl/Bitcode/bccompress.ll b/test/NaCl/Bitcode/bccompress.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d853d833f0307562aa39f4f0ad97d46917471f62
|
| --- /dev/null
|
| +++ b/test/NaCl/Bitcode/bccompress.ll
|
| @@ -0,0 +1,998 @@
|
| +; Simple test to see if pnacl-bccompress maintains bitcode.
|
| +
|
| +; Test 1: Show that we generate the same disassembled code.
|
| +; RUN: llvm-as < %s | pnacl-freeze -allow-local-symbol-tables \
|
| +; RUN: | pnacl-bccompress \
|
| +; RUN: | pnacl-thaw -allow-local-symbol-tables \
|
| +; RUN: | llvm-dis - | FileCheck %s
|
| +
|
| +; Test 2: Show that both the precompressed, and the compressed versions
|
| +; of the bitcode contain the same records.
|
| +; RUN: llvm-as < %s | pnacl-freeze \
|
| +; RUN: | pnacl-bcanalyzer -operands-per-line=6 -dump-records \
|
| +; RUN: | FileCheck %s --check-prefix DUMP
|
| +; RUN: llvm-as < %s | pnacl-freeze | pnacl-bccompress \
|
| +; RUN: | pnacl-bcanalyzer -operands-per-line=6 -dump-records \
|
| +; RUN: | FileCheck %s --check-prefix DUMP
|
| +
|
| +@bytes7 = internal global [7 x i8] c"abcdefg"
|
| +; CHECK: @bytes7 = internal global [7 x i8] c"abcdefg"
|
| +
|
| +@ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32)
|
| +; CHECK-NEXT: @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32)
|
| +
|
| +@ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32)
|
| +; CHECK-NEXT: @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32)
|
| +
|
| +@compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }>
|
| +; CHECK-NEXT: @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }>
|
| +
|
| +@ptr = internal global i32 ptrtoint ([7 x i8]* @bytes7 to i32)
|
| +; CHECK-NEXT: @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes7 to i32)
|
| +
|
| +@addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1)
|
| +; CHECK-NEXT: @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1)
|
| +
|
| +@addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1)
|
| +; CHECK-NEXT: @addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1)
|
| +
|
| +@addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32), i32 1)
|
| +; CHECK-NEXT: @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32), i32 1)
|
| +
|
| +@addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32), i32 7)
|
| +; CHECK-NEXT: @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32), i32 7)
|
| +
|
| +@addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32), i32 9)
|
| +; CHECK-NEXT: @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes7 to i32), i32 9)
|
| +
|
| +@addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1)
|
| +; CHECK-NEXT: @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1)
|
| +
|
| +@addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4)
|
| +; CHECK-NEXT: @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4)
|
| +
|
| +@ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align 8
|
| +; CHECK-NEXT: @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align 8
|
| +
|
| +@char = internal constant [1 x i8] c"0"
|
| +; CHECK-NEXT: @char = internal constant [1 x i8] c"0"
|
| +
|
| +@short = internal constant [2 x i8] zeroinitializer
|
| +; CHECK-NEXT: @short = internal constant [2 x i8] zeroinitializer
|
| +
|
| +@bytes = internal global [4 x i8] c"abcd"
|
| +; CHECK-NEXT: @bytes = internal global [4 x i8] c"abcd"
|
| +
|
| +declare i32 @bar(i32)
|
| +; CHECK: declare i32 @bar(i32)
|
| +
|
| +define void @func() {
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @func() {
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @AllocCastSimple() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint i8* %1 to i32
|
| + %3 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %2, i32* %3, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @AllocCastSimple() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %3 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @AllocCastSimpleReversed() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint i8* %1 to i32
|
| + %3 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %2, i32* %3, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @AllocCastSimpleReversed() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %3 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @AllocCastDelete() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = alloca i8, i32 4, align 8
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @AllocCastDelete() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @AllocCastOpt() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint i8* %1 to i32
|
| + %3 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %2, i32* %3, align 1
|
| + store i32 %2, i32* %3, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @AllocCastOpt() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %3 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @AllocBitcast(i32) {
|
| + %2 = alloca i8, i32 4, align 8
|
| + %3 = add i32 %0, 1
|
| + %4 = ptrtoint i8* %2 to i32
|
| + %5 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %4, i32* %5, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @AllocBitcast(i32) {
|
| +; CHECK-NEXT: %2 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %3 = add i32 %0, 1
|
| +; CHECK-NEXT: %4 = ptrtoint i8* %2 to i32
|
| +; CHECK-NEXT: %5 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %4, i32* %5, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @StoreGlobal() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint [4 x i8]* @bytes to i32
|
| + %3 = bitcast i8* %1 to i32*
|
| + store i32 %2, i32* %3, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @StoreGlobal() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32
|
| +; CHECK-NEXT: %3 = bitcast i8* %1 to i32*
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @StoreGlobalCastsReversed() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint [4 x i8]* @bytes to i32
|
| + %3 = bitcast i8* %1 to i32*
|
| + store i32 %2, i32* %3, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @StoreGlobalCastsReversed() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32
|
| +; CHECK-NEXT: %3 = bitcast i8* %1 to i32*
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define i32 @StoreGlobalCastPtr2Int() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint [4 x i8]* @bytes to i32
|
| + %3 = bitcast i8* %1 to i32*
|
| + store i32 %2, i32* %3, align 1
|
| + ret i32 0
|
| +}
|
| +
|
| +; CHECK: define i32 @StoreGlobalCastPtr2Int() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32
|
| +; CHECK-NEXT: %3 = bitcast i8* %1 to i32*
|
| +; CHECK-NEXT: store i32 %2, i32* %3, align 1
|
| +; CHECK-NEXT: ret i32 0
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @CastAddAlloca() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = add i32 1, 2
|
| + %3 = ptrtoint i8* %1 to i32
|
| + %4 = add i32 %3, 2
|
| + %5 = add i32 1, %3
|
| + %6 = add i32 %3, %3
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @CastAddAlloca() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = add i32 1, 2
|
| +; CHECK-NEXT: %3 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %4 = add i32 %3, 2
|
| +; CHECK-NEXT: %5 = add i32 1, %3
|
| +; CHECK-NEXT: %6 = add i32 %3, %3
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @CastAddGlobal() {
|
| + %1 = add i32 1, 2
|
| + %2 = ptrtoint [4 x i8]* @bytes to i32
|
| + %3 = add i32 %2, 2
|
| + %4 = add i32 1, %2
|
| + %5 = add i32 %2, %2
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @CastAddGlobal() {
|
| +; CHECK-NEXT: %1 = add i32 1, 2
|
| +; CHECK-NEXT: %2 = ptrtoint [4 x i8]* @bytes to i32
|
| +; CHECK-NEXT: %3 = add i32 %2, 2
|
| +; CHECK-NEXT: %4 = add i32 1, %2
|
| +; CHECK-NEXT: %5 = add i32 %2, %2
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @CastBinop() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint i8* %1 to i32
|
| + %3 = ptrtoint [4 x i8]* @bytes to i32
|
| + %4 = sub i32 %2, %3
|
| + %5 = mul i32 %2, %3
|
| + %6 = udiv i32 %2, %3
|
| + %7 = urem i32 %2, %3
|
| + %8 = srem i32 %2, %3
|
| + %9 = shl i32 %2, %3
|
| + %10 = lshr i32 %2, %3
|
| + %11 = ashr i32 %2, %3
|
| + %12 = and i32 %2, %3
|
| + %13 = or i32 %2, %3
|
| + %14 = xor i32 %2, %3
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @CastBinop() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %3 = ptrtoint [4 x i8]* @bytes to i32
|
| +; CHECK-NEXT: %4 = sub i32 %2, %3
|
| +; CHECK-NEXT: %5 = mul i32 %2, %3
|
| +; CHECK-NEXT: %6 = udiv i32 %2, %3
|
| +; CHECK-NEXT: %7 = urem i32 %2, %3
|
| +; CHECK-NEXT: %8 = srem i32 %2, %3
|
| +; CHECK-NEXT: %9 = shl i32 %2, %3
|
| +; CHECK-NEXT: %10 = lshr i32 %2, %3
|
| +; CHECK-NEXT: %11 = ashr i32 %2, %3
|
| +; CHECK-NEXT: %12 = and i32 %2, %3
|
| +; CHECK-NEXT: %13 = or i32 %2, %3
|
| +; CHECK-NEXT: %14 = xor i32 %2, %3
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @TestSavedPtrToInt() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = ptrtoint i8* %1 to i32
|
| + %3 = add i32 %2, 0
|
| + %4 = call i32 @bar(i32 %2)
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @TestSavedPtrToInt() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %3 = add i32 %2, 0
|
| +; CHECK-NEXT: %4 = call i32 @bar(i32 %2)
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @CastSelect() {
|
| + %1 = alloca i8, i32 4, align 8
|
| + %2 = select i1 true, i32 1, i32 2
|
| + %3 = ptrtoint i8* %1 to i32
|
| + %4 = select i1 true, i32 %3, i32 2
|
| + %5 = ptrtoint [4 x i8]* @bytes to i32
|
| + %6 = select i1 true, i32 1, i32 %5
|
| + %7 = select i1 true, i32 %3, i32 %5
|
| + %8 = select i1 true, i32 %5, i32 %3
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @CastSelect() {
|
| +; CHECK-NEXT: %1 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %2 = select i1 true, i32 1, i32 2
|
| +; CHECK-NEXT: %3 = ptrtoint i8* %1 to i32
|
| +; CHECK-NEXT: %4 = select i1 true, i32 %3, i32 2
|
| +; CHECK-NEXT: %5 = ptrtoint [4 x i8]* @bytes to i32
|
| +; CHECK-NEXT: %6 = select i1 true, i32 1, i32 %5
|
| +; CHECK-NEXT: %7 = select i1 true, i32 %3, i32 %5
|
| +; CHECK-NEXT: %8 = select i1 true, i32 %5, i32 %3
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @PhiBackwardRefs(i1) {
|
| + %2 = alloca i8, i32 4, align 8
|
| + %3 = alloca i8, i32 4, align 8
|
| + br i1 %0, label %true, label %false
|
| +
|
| +true: ; preds = %1
|
| + %4 = bitcast i8* %2 to i32*
|
| + %5 = load i32* %4
|
| + %6 = ptrtoint i8* %3 to i32
|
| + br label %merge
|
| +
|
| +false: ; preds = %1
|
| + %7 = bitcast i8* %2 to i32*
|
| + %8 = load i32* %7
|
| + %9 = ptrtoint i8* %3 to i32
|
| + br label %merge
|
| +
|
| +merge: ; preds = %false, %true
|
| + %10 = phi i32 [ %6, %true ], [ %9, %false ]
|
| + %11 = phi i32 [ %5, %true ], [ %8, %false ]
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @PhiBackwardRefs(i1) {
|
| +; CHECK-NEXT: %2 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %3 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: br i1 %0, label %true, label %false
|
| +; CHECK: true: ; preds = %1
|
| +; CHECK-NEXT: %4 = bitcast i8* %2 to i32*
|
| +; CHECK-NEXT: %5 = load i32* %4
|
| +; CHECK-NEXT: %6 = ptrtoint i8* %3 to i32
|
| +; CHECK-NEXT: br label %merge
|
| +; CHECK: false: ; preds = %1
|
| +; CHECK-NEXT: %7 = bitcast i8* %2 to i32*
|
| +; CHECK-NEXT: %8 = load i32* %7
|
| +; CHECK-NEXT: %9 = ptrtoint i8* %3 to i32
|
| +; CHECK-NEXT: br label %merge
|
| +; CHECK: merge: ; preds = %false, %true
|
| +; CHECK-NEXT: %10 = phi i32 [ %6, %true ], [ %9, %false ]
|
| +; CHECK-NEXT: %11 = phi i32 [ %5, %true ], [ %8, %false ]
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @PhiForwardRefs(i1) {
|
| + br label %start
|
| +
|
| +merge: ; preds = %false, %true
|
| + %2 = phi i32 [ %11, %true ], [ %11, %false ]
|
| + %3 = phi i32 [ %5, %true ], [ %7, %false ]
|
| + ret void
|
| +
|
| +true: ; preds = %start
|
| + %4 = inttoptr i32 %9 to i32*
|
| + %5 = load i32* %4
|
| + br label %merge
|
| +
|
| +false: ; preds = %start
|
| + %6 = inttoptr i32 %9 to i32*
|
| + %7 = load i32* %6
|
| + br label %merge
|
| +
|
| +start: ; preds = %1
|
| + %8 = alloca i8, i32 4, align 8
|
| + %9 = ptrtoint i8* %8 to i32
|
| + %10 = alloca i8, i32 4, align 8
|
| + %11 = ptrtoint i8* %10 to i32
|
| + br i1 %0, label %true, label %false
|
| +}
|
| +
|
| +; CHECK: define void @PhiForwardRefs(i1) {
|
| +; CHECK-NEXT: br label %start
|
| +; CHECK: merge: ; preds = %false, %true
|
| +; CHECK-NEXT: %2 = phi i32 [ %11, %true ], [ %11, %false ]
|
| +; CHECK-NEXT: %3 = phi i32 [ %5, %true ], [ %7, %false ]
|
| +; CHECK-NEXT: ret void
|
| +; CHECK: true: ; preds = %start
|
| +; CHECK-NEXT: %4 = inttoptr i32 %9 to i32*
|
| +; CHECK-NEXT: %5 = load i32* %4
|
| +; CHECK-NEXT: br label %merge
|
| +; CHECK: false: ; preds = %start
|
| +; CHECK-NEXT: %6 = inttoptr i32 %9 to i32*
|
| +; CHECK-NEXT: %7 = load i32* %6
|
| +; CHECK-NEXT: br label %merge
|
| +; CHECK: start: ; preds = %1
|
| +; CHECK-NEXT: %8 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %9 = ptrtoint i8* %8 to i32
|
| +; CHECK-NEXT: %10 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %11 = ptrtoint i8* %10 to i32
|
| +; CHECK-NEXT: br i1 %0, label %true, label %false
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @PhiMergeCast(i1) {
|
| + %2 = alloca i8, i32 4, align 8
|
| + %3 = alloca i8, i32 4, align 8
|
| + br i1 %0, label %true, label %false
|
| +
|
| +true: ; preds = %1
|
| + %4 = bitcast i8* %2 to i32*
|
| + %5 = load i32* %4
|
| + %6 = ptrtoint i8* %3 to i32
|
| + %7 = add i32 %5, %6
|
| + br label %merge
|
| +
|
| +false: ; preds = %1
|
| + %8 = bitcast i8* %2 to i32*
|
| + %9 = load i32* %8
|
| + %10 = ptrtoint i8* %3 to i32
|
| + br label %merge
|
| +
|
| +merge: ; preds = %false, %true
|
| + %11 = phi i32 [ %6, %true ], [ %10, %false ]
|
| + %12 = phi i32 [ %5, %true ], [ %9, %false ]
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @PhiMergeCast(i1) {
|
| +; CHECK-NEXT: %2 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: %3 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: br i1 %0, label %true, label %false
|
| +; CHECK: true: ; preds = %1
|
| +; CHECK-NEXT: %4 = bitcast i8* %2 to i32*
|
| +; CHECK-NEXT: %5 = load i32* %4
|
| +; CHECK-NEXT: %6 = ptrtoint i8* %3 to i32
|
| +; CHECK-NEXT: %7 = add i32 %5, %6
|
| +; CHECK-NEXT: br label %merge
|
| +; CHECK: false: ; preds = %1
|
| +; CHECK-NEXT: %8 = bitcast i8* %2 to i32*
|
| +; CHECK-NEXT: %9 = load i32* %8
|
| +; CHECK-NEXT: %10 = ptrtoint i8* %3 to i32
|
| +; CHECK-NEXT: br label %merge
|
| +; CHECK: merge: ; preds = %false, %true
|
| +; CHECK-NEXT: %11 = phi i32 [ %6, %true ], [ %10, %false ]
|
| +; CHECK-NEXT: %12 = phi i32 [ %5, %true ], [ %9, %false ]
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @LongReachingCasts(i1) {
|
| + %2 = alloca i8, i32 4, align 8
|
| + br i1 %0, label %Split1, label %Split2
|
| +
|
| +Split1: ; preds = %1
|
| + br i1 %0, label %b1, label %b2
|
| +
|
| +Split2: ; preds = %1
|
| + br i1 %0, label %b3, label %b4
|
| +
|
| +b1: ; preds = %Split1
|
| + %3 = ptrtoint i8* %2 to i32
|
| + %4 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %3, i32* %4, align 1
|
| + store i32 %3, i32* %4, align 1
|
| + ret void
|
| +
|
| +b2: ; preds = %Split1
|
| + %5 = ptrtoint i8* %2 to i32
|
| + %6 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %5, i32* %6, align 1
|
| + store i32 %5, i32* %6, align 1
|
| + ret void
|
| +
|
| +b3: ; preds = %Split2
|
| + %7 = ptrtoint i8* %2 to i32
|
| + %8 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %7, i32* %8, align 1
|
| + store i32 %7, i32* %8, align 1
|
| + ret void
|
| +
|
| +b4: ; preds = %Split2
|
| + %9 = ptrtoint i8* %2 to i32
|
| + %10 = bitcast [4 x i8]* @bytes to i32*
|
| + store i32 %9, i32* %10, align 1
|
| + store i32 %9, i32* %10, align 1
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @LongReachingCasts(i1) {
|
| +; CHECK-NEXT: %2 = alloca i8, i32 4, align 8
|
| +; CHECK-NEXT: br i1 %0, label %Split1, label %Split2
|
| +; CHECK: Split1: ; preds = %1
|
| +; CHECK-NEXT: br i1 %0, label %b1, label %b2
|
| +; CHECK: Split2: ; preds = %1
|
| +; CHECK-NEXT: br i1 %0, label %b3, label %b4
|
| +; CHECK: b1: ; preds = %Split1
|
| +; CHECK-NEXT: %3 = ptrtoint i8* %2 to i32
|
| +; CHECK-NEXT: %4 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %3, i32* %4, align 1
|
| +; CHECK-NEXT: store i32 %3, i32* %4, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK: b2: ; preds = %Split1
|
| +; CHECK-NEXT: %5 = ptrtoint i8* %2 to i32
|
| +; CHECK-NEXT: %6 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %5, i32* %6, align 1
|
| +; CHECK-NEXT: store i32 %5, i32* %6, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK: b3: ; preds = %Split2
|
| +; CHECK-NEXT: %7 = ptrtoint i8* %2 to i32
|
| +; CHECK-NEXT: %8 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %7, i32* %8, align 1
|
| +; CHECK-NEXT: store i32 %7, i32* %8, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK: b4: ; preds = %Split2
|
| +; CHECK-NEXT: %9 = ptrtoint i8* %2 to i32
|
| +; CHECK-NEXT: %10 = bitcast [4 x i8]* @bytes to i32*
|
| +; CHECK-NEXT: store i32 %9, i32* %10, align 1
|
| +; CHECK-NEXT: store i32 %9, i32* %10, align 1
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +define void @SwitchVariable(i32) {
|
| + switch i32 %0, label %l1 [
|
| + i32 1, label %l2
|
| + i32 2, label %l2
|
| + i32 4, label %l3
|
| + i32 5, label %l3
|
| + ]
|
| + ; No predecessors!
|
| + br label %end
|
| +
|
| +l1: ; preds = %1
|
| + br label %end
|
| +
|
| +l2: ; preds = %1, %1
|
| + br label %end
|
| +
|
| +l3: ; preds = %1, %1
|
| + br label %end
|
| +
|
| +end: ; preds = %l3, %l2, %l1, %2
|
| + ret void
|
| +}
|
| +
|
| +; CHECK: define void @SwitchVariable(i32) {
|
| +; CHECK-NEXT: switch i32 %0, label %l1 [
|
| +; CHECK-NEXT: i32 1, label %l2
|
| +; CHECK-NEXT: i32 2, label %l2
|
| +; CHECK-NEXT: i32 4, label %l3
|
| +; CHECK-NEXT: i32 5, label %l3
|
| +; CHECK-NEXT: ]
|
| +; CHECK-NEXT: ; No predecessors!
|
| +; CHECK-NEXT: br label %end
|
| +; CHECK: l1: ; preds = %1
|
| +; CHECK-NEXT: br label %end
|
| +; CHECK: l2: ; preds = %1, %1
|
| +; CHECK-NEXT: br label %end
|
| +; CHECK: l3: ; preds = %1, %1
|
| +; CHECK-NEXT: br label %end
|
| +; CHECK: end: ; preds = %l3, %l2, %l1, %2
|
| +; CHECK-NEXT: ret void
|
| +; CHECK-NEXT: }
|
| +
|
| +; DUMP: PNaCl Version: 2
|
| +
|
| +; DUMP: <MODULE_BLOCK>
|
| +; DUMP-NEXT: <VERSION op0=1/>
|
| +; DUMP-NEXT: <BLOCKINFO_BLOCK/>
|
| +; DUMP-NEXT: <TYPE_BLOCK_ID>
|
| +; DUMP-NEXT: <NUMENTRY op0=9/>
|
| +; DUMP-NEXT: <INTEGER op0=32/>
|
| +; DUMP-NEXT: <VOID/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: <INTEGER op0=1/>
|
| +; DUMP-NEXT: <FUNCTION op0=0 op1=1/>
|
| +; DUMP-NEXT: <FUNCTION op0=0 op1=1 op2=3/>
|
| +; DUMP-NEXT: <FUNCTION op0=0 op1=0 op2=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=0 op1=1 op2=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=0 op1=0/>
|
| +; DUMP-NEXT: </TYPE_BLOCK_ID>
|
| +; DUMP-NEXT: <FUNCTION op0=6 op1=0 op2=1 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=7 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=8 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=4 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=5 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <FUNCTION op0=7 op1=0 op2=0 op3=0/>
|
| +; DUMP-NEXT: <GLOBALVAR_BLOCK>
|
| +; DUMP-NEXT: <COUNT op0=16/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <DATA op0=97 op1=98 op2=99 op3=100 op4=101 op5=102
|
| +; DUMP-NEXT: op6=103/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=24/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=1/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <COMPOUND op0=2/>
|
| +; DUMP-NEXT: <DATA op0=102 op1=111 op2=111/>
|
| +; DUMP-NEXT: <RELOC op0=1/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=20/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=24 op1=1/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=24 op1=4294967295/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=20 op1=1/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=20 op1=7/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=20 op1=9/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=23 op1=1/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=23 op1=4/>
|
| +; DUMP-NEXT: <VAR op0=4 op1=0/>
|
| +; DUMP-NEXT: <RELOC op0=1/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=1/>
|
| +; DUMP-NEXT: <DATA op0=48/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=1/>
|
| +; DUMP-NEXT: <ZEROFILL op0=2/>
|
| +; DUMP-NEXT: <VAR op0=0 op1=0/>
|
| +; DUMP-NEXT: <DATA op0=97 op1=98 op2=99 op3=100/>
|
| +; DUMP-NEXT: </GLOBALVAR_BLOCK>
|
| +; DUMP-NEXT: <VALUE_SYMTAB>
|
| +; DUMP-NEXT: <ENTRY op0=2 op1=65 op2=108 op3=108 op4=111 op5=99
|
| +; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=83 op11=105
|
| +; DUMP-NEXT: op12=109 op13=112 op14=108 op15=101/>
|
| +; DUMP-NEXT: <ENTRY op0=10 op1=67 op2=97 op3=115 op4=116 op5=65
|
| +; DUMP-NEXT: op6=100 op7=100 op8=65 op9=108 op10=108 op11=111
|
| +; DUMP-NEXT: op12=99 op13=97/>
|
| +; DUMP-NEXT: <ENTRY op0=20 op1=98 op2=121 op3=116 op4=101 op5=115
|
| +; DUMP-NEXT: op6=55/>
|
| +; DUMP-NEXT: <ENTRY op0=23 op1=99 op2=111 op3=109 op4=112 op5=111
|
| +; DUMP-NEXT: op6=117 op7=110 op8=100/>
|
| +; DUMP-NEXT: <ENTRY op0=5 op1=65 op2=108 op3=108 op4=111 op5=99
|
| +; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=79 op11=112
|
| +; DUMP-NEXT: op12=116/>
|
| +; DUMP-NEXT: <ENTRY op0=32 op1=112 op2=116 op3=114 op4=95 op5=116
|
| +; DUMP-NEXT: op6=111 op7=95 op8=102 op9=117 op10=110 op11=99
|
| +; DUMP-NEXT: op12=95 op13=97 op14=108 op15=105 op16=103 op17=110/>
|
| +; DUMP-NEXT: <ENTRY op0=18 op1=76 op2=111 op3=110 op4=103 op5=82
|
| +; DUMP-NEXT: op6=101 op7=97 op8=99 op9=104 op10=105 op11=110
|
| +; DUMP-NEXT: op12=103 op13=67 op14=97 op15=115 op16=116 op17=115/>
|
| +; DUMP-NEXT: <ENTRY op0=15 op1=80 op2=104 op3=105 op4=66 op5=97
|
| +; DUMP-NEXT: op6=99 op7=107 op8=119 op9=97 op10=114 op11=100
|
| +; DUMP-NEXT: op12=82 op13=101 op14=102 op15=115/>
|
| +; DUMP-NEXT: <ENTRY op0=26 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=110 op9=101 op10=103 op11=97
|
| +; DUMP-NEXT: op12=116 op13=105 op14=118 op15=101/>
|
| +; DUMP-NEXT: <ENTRY op0=6 op1=65 op2=108 op3=108 op4=111 op5=99
|
| +; DUMP-NEXT: op6=66 op7=105 op8=116 op9=99 op10=97 op11=115
|
| +; DUMP-NEXT: op12=116/>
|
| +; DUMP-NEXT: <ENTRY op0=24 op1=112 op2=116 op3=114/>
|
| +; DUMP-NEXT: <ENTRY op0=25 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=112 op9=116 op10=114/>
|
| +; DUMP-NEXT: <ENTRY op0=19 op1=83 op2=119 op3=105 op4=116 op5=99
|
| +; DUMP-NEXT: op6=104 op7=86 op8=97 op9=114 op10=105 op11=97
|
| +; DUMP-NEXT: op12=98 op13=108 op14=101/>
|
| +; DUMP-NEXT: <ENTRY op0=0 op1=98 op2=97 op3=114/>
|
| +; DUMP-NEXT: <ENTRY op0=33 op1=99 op2=104 op3=97 op4=114/>
|
| +; DUMP-NEXT: <ENTRY op0=3 op1=65 op2=108 op3=108 op4=111 op5=99
|
| +; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=83 op11=105
|
| +; DUMP-NEXT: op12=109 op13=112 op14=108 op15=101 op16=82 op17=101
|
| +; DUMP-NEXT: op18=118 op19=101 op20=114 op21=115 op22=101 op23=100/>
|
| +; DUMP-NEXT: <ENTRY op0=22 op1=112 op2=116 op3=114 op4=95 op5=116
|
| +; DUMP-NEXT: op6=111 op7=95 op8=102 op9=117 op10=110 op11=99/>
|
| +; DUMP-NEXT: <ENTRY op0=12 op1=67 op2=97 op3=115 op4=116 op5=66
|
| +; DUMP-NEXT: op6=105 op7=110 op8=111 op9=112/>
|
| +; DUMP-NEXT: <ENTRY op0=11 op1=67 op2=97 op3=115 op4=116 op5=65
|
| +; DUMP-NEXT: op6=100 op7=100 op8=71 op9=108 op10=111 op11=98
|
| +; DUMP-NEXT: op12=97 op13=108/>
|
| +; DUMP-NEXT: <ENTRY op0=16 op1=80 op2=104 op3=105 op4=70 op5=111
|
| +; DUMP-NEXT: op6=114 op7=119 op8=97 op9=114 op10=100 op11=82
|
| +; DUMP-NEXT: op12=101 op13=102 op14=115/>
|
| +; DUMP-NEXT: <ENTRY op0=35 op1=98 op2=121 op3=116 op4=101 op5=115/>
|
| +; DUMP-NEXT: <ENTRY op0=4 op1=65 op2=108 op3=108 op4=111 op5=99
|
| +; DUMP-NEXT: op6=67 op7=97 op8=115 op9=116 op10=68 op11=101
|
| +; DUMP-NEXT: op12=108 op13=101 op14=116 op15=101/>
|
| +; DUMP-NEXT: <ENTRY op0=14 op1=67 op2=97 op3=115 op4=116 op5=83
|
| +; DUMP-NEXT: op6=101 op7=108 op8=101 op9=99 op10=116/>
|
| +; DUMP-NEXT: <ENTRY op0=1 op1=102 op2=117 op3=110 op4=99/>
|
| +; DUMP-NEXT: <ENTRY op0=21 op1=112 op2=116 op3=114 op4=95 op5=116
|
| +; DUMP-NEXT: op6=111 op7=95 op8=112 op9=116 op10=114/>
|
| +; DUMP-NEXT: <ENTRY op0=27 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=97 op9=114 op10=114 op11=97
|
| +; DUMP-NEXT: op12=121 op13=49/>
|
| +; DUMP-NEXT: <ENTRY op0=28 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=97 op9=114 op10=114 op11=97
|
| +; DUMP-NEXT: op12=121 op13=50/>
|
| +; DUMP-NEXT: <ENTRY op0=29 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=97 op9=114 op10=114 op11=97
|
| +; DUMP-NEXT: op12=121 op13=51/>
|
| +; DUMP-NEXT: <ENTRY op0=34 op1=115 op2=104 op3=111 op4=114 op5=116/>
|
| +; DUMP-NEXT: <ENTRY op0=30 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=115 op9=116 op10=114 op11=117
|
| +; DUMP-NEXT: op12=99 op13=116 op14=49/>
|
| +; DUMP-NEXT: <ENTRY op0=31 op1=97 op2=100 op3=100 op4=101 op5=110
|
| +; DUMP-NEXT: op6=100 op7=95 op8=115 op9=116 op10=114 op11=117
|
| +; DUMP-NEXT: op12=99 op13=116 op14=50/>
|
| +; DUMP-NEXT: <ENTRY op0=13 op1=84 op2=101 op3=115 op4=116 op5=83
|
| +; DUMP-NEXT: op6=97 op7=118 op8=101 op9=100 op10=80 op11=116
|
| +; DUMP-NEXT: op12=114 op13=84 op14=111 op15=73 op16=110 op17=116/>
|
| +; DUMP-NEXT: <ENTRY op0=17 op1=80 op2=104 op3=105 op4=77 op5=101
|
| +; DUMP-NEXT: op6=114 op7=103 op8=101 op9=67 op10=97 op11=115
|
| +; DUMP-NEXT: op12=116/>
|
| +; DUMP-NEXT: <ENTRY op0=8 op1=83 op2=116 op3=111 op4=114 op5=101
|
| +; DUMP-NEXT: op6=71 op7=108 op8=111 op9=98 op10=97 op11=108
|
| +; DUMP-NEXT: op12=67 op13=97 op14=115 op15=116 op16=115 op17=82
|
| +; DUMP-NEXT: op18=101 op19=118 op20=101 op21=114 op22=115 op23=101
|
| +; DUMP-NEXT: op24=100/>
|
| +; DUMP-NEXT: <ENTRY op0=7 op1=83 op2=116 op3=111 op4=114 op5=101
|
| +; DUMP-NEXT: op6=71 op7=108 op8=111 op9=98 op10=97 op11=108/>
|
| +; DUMP-NEXT: <ENTRY op0=9 op1=83 op2=116 op3=111 op4=114 op5=101
|
| +; DUMP-NEXT: op6=71 op7=108 op8=111 op9=98 op10=97 op11=108
|
| +; DUMP-NEXT: op12=67 op13=97 op14=115 op15=116 op16=80 op17=116
|
| +; DUMP-NEXT: op18=114 op19=50 op20=73 op21=110 op22=116/>
|
| +; DUMP-NEXT: </VALUE_SYMTAB>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_STORE op0=3 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: <INTEGER op0=2/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_BINOP op0=4 op1=2 op2=0/>
|
| +; DUMP-NEXT: <INST_STORE op0=6 op1=2 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_STORE op0=1 op1=3 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_STORE op0=1 op1=3 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: <INTEGER op0=0/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_STORE op0=1 op1=4 op2=1/>
|
| +; DUMP-NEXT: <INST_RET op0=2/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=2/>
|
| +; DUMP-NEXT: <INTEGER op0=4/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_BINOP op0=4 op1=3 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=2 op1=4 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=6 op1=3 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=4 op1=4 op2=0/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=2/>
|
| +; DUMP-NEXT: <INTEGER op0=4/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_BINOP op0=2 op1=1 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=4 op1=2 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=4 op1=5 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=6 op1=6 op2=0/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_BINOP op0=1 op1=3 op2=1/>
|
| +; DUMP-NEXT: <INST_BINOP op0=2 op1=4 op2=2/>
|
| +; DUMP-NEXT: <INST_BINOP op0=3 op1=5 op2=3/>
|
| +; DUMP-NEXT: <INST_BINOP op0=4 op1=6 op2=5/>
|
| +; DUMP-NEXT: <INST_BINOP op0=5 op1=7 op2=6/>
|
| +; DUMP-NEXT: <INST_BINOP op0=6 op1=8 op2=7/>
|
| +; DUMP-NEXT: <INST_BINOP op0=7 op1=9 op2=8/>
|
| +; DUMP-NEXT: <INST_BINOP op0=8 op1=10 op2=9/>
|
| +; DUMP-NEXT: <INST_BINOP op0=9 op1=11 op2=10/>
|
| +; DUMP-NEXT: <INST_BINOP op0=10 op1=12 op2=11/>
|
| +; DUMP-NEXT: <INST_BINOP op0=11 op1=13 op2=12/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: <INTEGER op0=0/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_BINOP op0=1 op1=2 op2=0/>
|
| +; DUMP-NEXT: <INST_CALL op0=0 op1=40 op2=2/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=1/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=2/>
|
| +; DUMP-NEXT: <INTEGER op0=4/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: <SETTYPE op0=3/>
|
| +; DUMP-NEXT: <INTEGER op0=3/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_VSELECT op0=5 op1=4 op2=2/>
|
| +; DUMP-NEXT: <INST_VSELECT op0=2 op1=5 op2=3/>
|
| +; DUMP-NEXT: <INST_VSELECT op0=7 op1=8 op2=4/>
|
| +; DUMP-NEXT: <INST_VSELECT op0=4 op1=9 op2=5/>
|
| +; DUMP-NEXT: <INST_VSELECT op0=10 op1=5 op2=6/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=4/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_BR op0=1 op1=2 op2=4/>
|
| +; DUMP-NEXT: <INST_LOAD op0=2 op1=0 op2=0/>
|
| +; DUMP-NEXT: <INST_BR op0=3/>
|
| +; DUMP-NEXT: <INST_LOAD op0=3 op1=0 op2=0/>
|
| +; DUMP-NEXT: <INST_BR op0=3/>
|
| +; DUMP-NEXT: <INST_PHI op0=0 op1=6 op2=1 op3=6 op4=2/>
|
| +; DUMP-NEXT: <INST_PHI op0=0 op1=6 op2=1 op3=4 op4=2/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=5/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_BR op0=4/>
|
| +; DUMP-NEXT: <FORWARDTYPEREF op0=43 op1=0/>
|
| +; DUMP-NEXT: <INST_PHI op0=0 op1=11 op2=2 op3=11 op4=3/>
|
| +; DUMP-NEXT: <FORWARDTYPEREF op0=40 op1=0/>
|
| +; DUMP-NEXT: <FORWARDTYPEREF op0=41 op1=0/>
|
| +; DUMP-NEXT: <INST_PHI op0=0 op1=3 op2=2 op3=5 op4=3/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: <FORWARDTYPEREF op0=42 op1=0/>
|
| +; DUMP-NEXT: <INST_LOAD op0=4294967294 op1=0 op2=0/>
|
| +; DUMP-NEXT: <INST_BR op0=1/>
|
| +; DUMP-NEXT: <INST_LOAD op0=4294967295 op1=0 op2=0/>
|
| +; DUMP-NEXT: <INST_BR op0=1/>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=5 op1=4/>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=6 op1=4/>
|
| +; DUMP-NEXT: <INST_BR op0=2 op1=3 op2=8/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=4/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=2 op1=4/>
|
| +; DUMP-NEXT: <INST_BR op0=1 op1=2 op2=4/>
|
| +; DUMP-NEXT: <INST_LOAD op0=2 op1=0 op2=0/>
|
| +; DUMP-NEXT: <INST_BINOP op0=1 op1=2 op2=0/>
|
| +; DUMP-NEXT: <INST_BR op0=3/>
|
| +; DUMP-NEXT: <INST_LOAD op0=4 op1=0 op2=0/>
|
| +; DUMP-NEXT: <INST_BR op0=3/>
|
| +; DUMP-NEXT: <INST_PHI op0=0 op1=8 op2=1 op3=8 op4=2/>
|
| +; DUMP-NEXT: <INST_PHI op0=0 op1=8 op2=1 op3=4 op4=2/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=7/>
|
| +; DUMP-NEXT: <CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <SETTYPE op0=0/>
|
| +; DUMP-NEXT: <INTEGER op0=8/>
|
| +; DUMP-NEXT: </CONSTANTS_BLOCK>
|
| +; DUMP-NEXT: <INST_ALLOCA op0=1 op1=4/>
|
| +; DUMP-NEXT: <INST_BR op0=1 op1=2 op2=3/>
|
| +; DUMP-NEXT: <INST_BR op0=3 op1=4 op2=3/>
|
| +; DUMP-NEXT: <INST_BR op0=5 op1=6 op2=3/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_STORE op0=4 op1=1 op2=1/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <FUNCTION_BLOCK>
|
| +; DUMP-NEXT: <DECLAREBLOCKS op0=6/>
|
| +; DUMP-NEXT: <INST_SWITCH op0=0 op1=1 op2=2 op3=4 op4=1 op5=1
|
| +; DUMP-NEXT: op6=2 op7=3 op8=1 op9=1 op10=4 op11=3
|
| +; DUMP-NEXT: op12=1 op13=1 op14=8 op15=4 op16=1 op17=1
|
| +; DUMP-NEXT: op18=10 op19=4/>
|
| +; DUMP-NEXT: <INST_BR op0=5/>
|
| +; DUMP-NEXT: <INST_BR op0=5/>
|
| +; DUMP-NEXT: <INST_BR op0=5/>
|
| +; DUMP-NEXT: <INST_BR op0=5/>
|
| +; DUMP-NEXT: <INST_RET/>
|
| +; DUMP-NEXT: </FUNCTION_BLOCK>
|
| +; DUMP-NEXT:</MODULE_BLOCK>
|
| +
|
| +
|
|
|