Index: test/Transforms/NaCl/expand-varargs.ll |
diff --git a/test/Transforms/NaCl/expand-varargs.ll b/test/Transforms/NaCl/expand-varargs.ll |
index 937ff7faede11be49673e7822d801d038a22c05e..814e13a5857cc53ff3bb6c6ffec030445e732ee3 100644 |
--- a/test/Transforms/NaCl/expand-varargs.ll |
+++ b/test/Transforms/NaCl/expand-varargs.ll |
@@ -44,15 +44,15 @@ entry: |
%odouble = bitcast i8* %o8 to double* |
%arglist_alloc = alloca [4 x i32], align 4 |
- %arglist = getelementptr inbounds [4 x i32]* %arglist_alloc, i32 0, i32 0 |
+ %arglist = getelementptr inbounds [4 x i32], [4 x i32]* %arglist_alloc, i32 0, i32 0 |
%arglist.i8 = bitcast [4 x i32]* %arglist_alloc to i8* |
call void @llvm.va_start(i8* %arglist.i8) |
br label %start |
start: |
%idx = phi i32 [ 0, %entry ], [ %inc, %next ] |
- %fmt.gep = getelementptr inbounds i8* %fmt, i32 %idx |
- %arg.type = load i8* %fmt.gep |
+ %fmt.gep = getelementptr inbounds i8, i8* %fmt, i32 %idx |
+ %arg.type = load i8, i8* %fmt.gep |
switch i8 %arg.type, label %next [ |
i8 0, label %done |
i8 1, label %type.i8 |
@@ -68,15 +68,15 @@ type.i8: ; CHECK: type.i8: |
store i8 %i8, i8* %o8 |
br label %next |
; CHECK-NEXT: %arglist1 = bitcast i32* %arglist to i8** |
-; CHECK-NEXT: %arglist_current = load i8** %arglist1 |
+; CHECK-NEXT: %arglist_current = load i8*, i8** %arglist1 |
; CHECK-NEXT: %[[P2I:[0-9]+]] = ptrtoint i8* %arglist_current to i32 |
; %A8 = (uintptr_t)Addr + Alignment - 1 |
-; CHECK-NEXT: %[[A8:[0-9]+]] = add nuw i32 %[[P2I]], sub nuw (i32 ptrtoint (i8* getelementptr ({ i1, i8 }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %[[A8:[0-9]+]] = add nuw i32 %[[P2I]], sub nuw (i32 ptrtoint (i8* getelementptr ({ i1, i8 }, { i1, i8 }* null, i64 0, i32 1) to i32), i32 1) |
; %B8 = %1 & ~(uintptr_t)(Alignment - 1) |
-; CHECK-NEXT: %[[B8:[0-9]+]] = and i32 %[[A8]], xor (i32 sub nuw (i32 ptrtoint (i8* getelementptr ({ i1, i8 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK-NEXT: %[[B8:[0-9]+]] = and i32 %[[A8]], xor (i32 sub nuw (i32 ptrtoint (i8* getelementptr ({ i1, i8 }, { i1, i8 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %[[C8:[0-9]+]] = inttoptr i32 %[[B8]] to i8* |
-; CHECK-NEXT: %i8 = load i8* %[[C8]] |
-; CHECK-NEXT: %arglist_next = getelementptr inbounds i8* %[[C8]], i32 1 |
+; CHECK-NEXT: %i8 = load i8, i8* %[[C8]] |
+; CHECK-NEXT: %arglist_next = getelementptr inbounds i8, i8* %[[C8]], i32 1 |
; CHECK-NEXT: store i8* %arglist_next, i8** %arglist1 |
; CHECK-NEXT: store i8 %i8, i8* %o8 |
; CHECK-NEXT: br label %next |
@@ -85,46 +85,46 @@ type.i16: ; CHECK: type.i16: |
%i16 = va_arg i32* %arglist, i16 |
store i16 %i16, i16* %o16 |
br label %next |
-; CHECK: %[[A16:[0-9]+]] = add nuw i32 %4, sub nuw (i32 ptrtoint (i16* getelementptr ({ i1, i16 }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %[[B16:[0-9]+]] = and i32 %[[A16]], xor (i32 sub nuw (i32 ptrtoint (i16* getelementptr ({ i1, i16 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK: %[[A16:[0-9]+]] = add nuw i32 %4, sub nuw (i32 ptrtoint (i16* getelementptr ({ i1, i16 }, { i1, i16 }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %[[B16:[0-9]+]] = and i32 %[[A16]], xor (i32 sub nuw (i32 ptrtoint (i16* getelementptr ({ i1, i16 }, { i1, i16 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %[[C16:[0-9]+]] = inttoptr i32 %[[B16]] to i16* |
-; CHECK-NEXT: %i16 = load i16* %[[C16]] |
+; CHECK-NEXT: %i16 = load i16, i16* %[[C16]] |
type.i32: ; CHECK: type.i32: |
%i32 = va_arg i32* %arglist, i32 |
store i32 %i32, i32* %o32 |
br label %next |
-; CHECK: %[[A32:[0-9]+]] = add nuw i32 %8, sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %[[B32:[0-9]+]] = and i32 %[[A32]], xor (i32 sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK: %[[A32:[0-9]+]] = add nuw i32 %8, sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }, { i1, i32 }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %[[B32:[0-9]+]] = and i32 %[[A32]], xor (i32 sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }, { i1, i32 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %[[C32:[0-9]+]] = inttoptr i32 %[[B32]] to i32* |
-; CHECK-NEXT: %i32 = load i32* %[[C32]] |
+; CHECK-NEXT: %i32 = load i32, i32* %[[C32]] |
type.i64: ; CHECK: type.i64: |
%i64 = va_arg i32* %arglist, i64 |
store i64 %i64, i64* %o64 |
br label %next |
-; CHECK: %[[A64:[0-9]+]] = add nuw i32 %12, sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %[[B64:[0-9]+]] = and i32 %[[A64]], xor (i32 sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK: %[[A64:[0-9]+]] = add nuw i32 %12, sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }, { i1, i64 }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %[[B64:[0-9]+]] = and i32 %[[A64]], xor (i32 sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }, { i1, i64 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %[[C64:[0-9]+]] = inttoptr i32 %[[B64]] to i64* |
-; CHECK-NEXT: %i64 = load i64* %[[C64]] |
+; CHECK-NEXT: %i64 = load i64, i64* %[[C64]] |
type.float: ; CHECK: type.float: |
%float = va_arg i32* %arglist, float |
store float %float, float* %ofloat |
br label %next |
-; CHECK: %[[AF:[0-9]+]] = add nuw i32 %16, sub nuw (i32 ptrtoint (float* getelementptr ({ i1, float }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %[[BF:[0-9]+]] = and i32 %[[AF]], xor (i32 sub nuw (i32 ptrtoint (float* getelementptr ({ i1, float }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK: %[[AF:[0-9]+]] = add nuw i32 %16, sub nuw (i32 ptrtoint (float* getelementptr ({ i1, float }, { i1, float }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %[[BF:[0-9]+]] = and i32 %[[AF]], xor (i32 sub nuw (i32 ptrtoint (float* getelementptr ({ i1, float }, { i1, float }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %[[CF:[0-9]+]] = inttoptr i32 %[[BF]] to float* |
-; CHECK-NEXT: %float = load float* %[[CF]] |
+; CHECK-NEXT: %float = load float, float* %[[CF]] |
type.double: ; CHECK: type.double: |
%double = va_arg i32* %arglist, double |
store double %double, double* %odouble |
br label %next |
-; CHECK: %[[AD:[0-9]+]] = add nuw i32 %20, sub nuw (i32 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %[[BD:[0-9]+]] = and i32 %[[AD]], xor (i32 sub nuw (i32 ptrtoint (double* getelementptr ({ i1, double }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK: %[[AD:[0-9]+]] = add nuw i32 %20, sub nuw (i32 ptrtoint (double* getelementptr ({ i1, double }, { i1, double }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %[[BD:[0-9]+]] = and i32 %[[AD]], xor (i32 sub nuw (i32 ptrtoint (double* getelementptr ({ i1, double }, { i1, double }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %[[CD:[0-9]+]] = inttoptr i32 %[[BD]] to double* |
-; CHECK-NEXT: %double = load double* %[[CD]] |
+; CHECK-NEXT: %double = load double, double* %[[CD]] |
next: |
%inc = add i32 %idx, 1 |
@@ -137,18 +137,18 @@ done: |
define i32 @varargs_call1() { |
- %result = call i32 (i32, ...)* @varargs_func(i32 111, i64 222, i32 333, double 4.0) |
+ %result = call i32 (i32, ...) @varargs_func(i32 111, i64 222, i32 333, double 4.0) |
ret i32 %result |
} |
; CHECK-LABEL: @varargs_call1( |
; CHECK-NEXT: %vararg_buffer = alloca { i64, i32, double } |
; CHECK-NEXT: %vararg_lifetime_bitcast = bitcast { i64, i32, double }* %vararg_buffer to i8* |
; CHECK-NEXT: call void @llvm.lifetime.start(i64 24, i8* %vararg_lifetime_bitcast) |
-; CHECK-NEXT: %vararg_ptr = getelementptr inbounds { i64, i32, double }* %vararg_buffer, i32 0, i32 0 |
+; CHECK-NEXT: %vararg_ptr = getelementptr inbounds { i64, i32, double }, { i64, i32, double }* %vararg_buffer, i32 0, i32 0 |
; CHECK-NEXT: store i64 222, i64* %vararg_ptr |
-; CHECK-NEXT: %vararg_ptr1 = getelementptr inbounds { i64, i32, double }* %vararg_buffer, i32 0, i32 1 |
+; CHECK-NEXT: %vararg_ptr1 = getelementptr inbounds { i64, i32, double }, { i64, i32, double }* %vararg_buffer, i32 0, i32 1 |
; CHECK-NEXT: store i32 333, i32* %vararg_ptr1 |
-; CHECK-NEXT: %vararg_ptr2 = getelementptr inbounds { i64, i32, double }* %vararg_buffer, i32 0, i32 2 |
+; CHECK-NEXT: %vararg_ptr2 = getelementptr inbounds { i64, i32, double }, { i64, i32, double }* %vararg_buffer, i32 0, i32 2 |
; CHECK-NEXT: store double 4.{{0*}}e+00, double* %vararg_ptr2 |
; CHECK-NEXT: %result = call i32 bitcast (i32 (i32, i8*)* @varargs_func to i32 (i32, { i64, i32, double }*)*)(i32 111, { i64, i32, double }* %vararg_buffer) |
; CHECK-NEXT: call void @llvm.lifetime.end(i64 24, i8* %vararg_lifetime_bitcast) |
@@ -157,7 +157,7 @@ define i32 @varargs_call1() { |
; Check that the pass works when there are no variable arguments. |
define i32 @call_with_zero_varargs() { |
- %result = call i32 (i32, ...)* @varargs_func(i32 111) |
+ %result = call i32 (i32, ...) @varargs_func(i32 111) |
ret i32 %result |
} |
; CHECK-LABEL: @call_with_zero_varargs( |
@@ -191,8 +191,8 @@ lpad: |
define void @varargs_multiple_calls() { |
- %call1 = call i32 (i32, ...)* @varargs_func(i32 11, i64 22, i32 33) |
- %call2 = call i32 (i32, ...)* @varargs_func(i32 44, i64 55, i32 66) |
+ %call1 = call i32 (i32, ...) @varargs_func(i32 11, i64 22, i32 33) |
+ %call2 = call i32 (i32, ...) @varargs_func(i32 44, i64 55, i32 66) |
ret void |
} |
; CHECK-LABEL: @varargs_multiple_calls( |
@@ -210,13 +210,13 @@ define i32 @va_arg_i32(i8* %arglist) { |
} |
; CHECK-LABEL: define i32 @va_arg_i32(i8* %arglist) { |
; CHECK-NEXT: %arglist1 = bitcast i8* %arglist to i32** |
-; CHECK-NEXT: %arglist_current = load i32** %arglist1 |
+; CHECK-NEXT: %arglist_current = load i32*, i32** %arglist1 |
; CHECK-NEXT: %1 = ptrtoint i32* %arglist_current to i32 |
-; CHECK-NEXT: %2 = add nuw i32 %1, sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %3 = and i32 %2, xor (i32 sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK-NEXT: %2 = add nuw i32 %1, sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }, { i1, i32 }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %3 = and i32 %2, xor (i32 sub nuw (i32 ptrtoint (i32* getelementptr ({ i1, i32 }, { i1, i32 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %4 = inttoptr i32 %3 to i32* |
-; CHECK-NEXT: %result = load i32* %4 |
-; CHECK-NEXT: %arglist_next = getelementptr inbounds i32* %4, i32 1 |
+; CHECK-NEXT: %result = load i32, i32* %4 |
+; CHECK-NEXT: %arglist_next = getelementptr inbounds i32, i32* %4, i32 1 |
; CHECK-NEXT: store i32* %arglist_next, i32** %arglist1 |
; CHECK-NEXT: ret i32 %result |
@@ -227,13 +227,13 @@ define i64 @va_arg_i64(i8* %arglist) { |
} |
; CHECK-LABEL: define i64 @va_arg_i64(i8* %arglist) { |
; CHECK-NEXT: %arglist1 = bitcast i8* %arglist to i64** |
-; CHECK-NEXT: %arglist_current = load i64** %arglist1 |
+; CHECK-NEXT: %arglist_current = load i64*, i64** %arglist1 |
; CHECK-NEXT: %1 = ptrtoint i64* %arglist_current to i32 |
-; CHECK-NEXT: %2 = add nuw i32 %1, sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }* null, i64 0, i32 1) to i32), i32 1) |
-; CHECK-NEXT: %3 = and i32 %2, xor (i32 sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
+; CHECK-NEXT: %2 = add nuw i32 %1, sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }, { i1, i64 }* null, i64 0, i32 1) to i32), i32 1) |
+; CHECK-NEXT: %3 = and i32 %2, xor (i32 sub nuw (i32 ptrtoint (i64* getelementptr ({ i1, i64 }, { i1, i64 }* null, i64 0, i32 1) to i32), i32 1), i32 -1) |
; CHECK-NEXT: %4 = inttoptr i32 %3 to i64* |
-; CHECK-NEXT: %result = load i64* %4 |
-; CHECK-NEXT: %arglist_next = getelementptr inbounds i64* %4, i32 1 |
+; CHECK-NEXT: %result = load i64, i64* %4 |
+; CHECK-NEXT: %arglist_next = getelementptr inbounds i64, i64* %4, i32 1 |
; CHECK-NEXT: store i64* %arglist_next, i64** %arglist1 |
; CHECK-NEXT: ret i64 %result |
@@ -245,6 +245,6 @@ define void @do_va_copy(i8* %dest, i8* %src) { |
; CHECK-LABEL: define void @do_va_copy( |
; CHECK-NEXT: %vacopy_src = bitcast i8* %src to i8** |
; CHECK-NEXT: %vacopy_dest = bitcast i8* %dest to i8** |
-; CHECK-NEXT: %vacopy_currentptr = load i8** %vacopy_src |
+; CHECK-NEXT: %vacopy_currentptr = load i8*, i8** %vacopy_src |
; CHECK-NEXT: store i8* %vacopy_currentptr, i8** %vacopy_dest |
; CHECK-NEXT: ret void |