Index: test/NaCl/Bitcode/inttoptr-of-ptrtoint-elide.ll |
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 0000000000000000000000000000000000000000..1d88ca5cd96c88ccda3ff23ad6e68643e5d8d4c4 |
--- /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: <FUNCTION_BLOCK> |
+; PF2-NEXT: <DECLAREBLOCKS op0=1/> |
+; PF2-NEXT: <INST_LOAD {{.*}}/> |
+; PF2-NEXT: <INST_RET/> |
+; PF2: </FUNCTION_BLOCK> |