From ed6b15283ff5f9d13cb48f88ba6e189be11291e8 Mon Sep 17 00:00:00 2001 From: Mark Seaborn Date: Thu, 3 Oct 2013 09:43:21 -0700 Subject: PNaCl bitcode: Simplify how the writer elides casts The PNaCl bitcode writer had some complex logic for deciding when to omit casts in the output. This was left over from when the writer was trying to leave in the casts in some but not all cases (as part of incrementally removing casts). This is no longer needed now that the writer just omits all inttoptrs, all ptrtoints, and all pointer bitcasts. This cleanup also fixes the writer so that it elides an inttoptr of a ptrtoint. This sequence is allowed by the PNaCl ABI verifier, but never occurred in practice because ReplacePtrsWithInts' SimplifyCasts() function converts this sequence to an equivalent bitcast. Before this change, the writer would give this error for an inttoptr-of-ptrtoint: LLVM ERROR: Illegal (PNaCl ABI) pointer cast : %1 = ptrtoint [4 x i8]* @bytes to i32 BUG=https://code.google.com/p/nativeclient/issues/detail?id=3590 TEST=toolchain trybots Review URL: https://codereview.chromium.org/25817002 --- test/NaCl/Bitcode/inttoptr-of-ptrtoint-elide.ll | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 test/NaCl/Bitcode/inttoptr-of-ptrtoint-elide.ll (limited to 'test') diff --git a/test/NaCl/Bitcode/inttoptr-of-ptrtoint-elide.ll b/test/NaCl/Bitcode/inttoptr-of-ptrtoint-elide.ll new file mode 100644 index 0000000000..1d88ca5cd9 --- /dev/null +++ b/test/NaCl/Bitcode/inttoptr-of-ptrtoint-elide.ll @@ -0,0 +1,32 @@ +; Test that the writer elides an inttoptr of a ptrtoint. + +; RUN: llvm-as < %s | pnacl-freeze \ +; RUN: | pnacl-bcanalyzer -dump-records \ +; RUN: | FileCheck %s -check-prefix=PF2 + +; RUN: llvm-as < %s | pnacl-freeze | pnacl-thaw \ +; RUN: | llvm-dis - | FileCheck %s -check-prefix=TD2 + + +@bytes = internal global [4 x i8] c"abcd" + +define void @inttoptr_of_ptrtoint() { + ; These two instructions are usually replaced with an equivalent + ; bitcast, but either sequence is allowed by the PNaCl ABI verifier. + %1 = ptrtoint [4 x i8]* @bytes to i32 + %2 = inttoptr i32 %1 to i8* + load i8* %2 + ret void +} + +; TD2: define void @inttoptr_of_ptrtoint() { +; TD2-NEXT: %1 = bitcast [4 x i8]* @bytes to i8* +; TD2-NEXT: %2 = load i8* %1 +; TD2-NEXT: ret void +; TD2-NEXT: } + +; PF2: +; PF2-NEXT: +; PF2-NEXT: +; PF2-NEXT: +; PF2: -- cgit v1.2.3-18-g5258