| OLD | NEW |
| 1 ; This tests the NaCl intrinsics not related to atomic operations. | 1 ; This tests the NaCl intrinsics not related to atomic operations. |
| 2 | 2 |
| 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 4 ; RUN: --target x8632 --sandbox -i %s --args -O2 \ | 4 ; RUN: --target x8632 --sandbox -i %s --args -O2 \ |
| 5 ; RUN: -allow-externally-defined-symbols \ | 5 ; RUN: -allow-externally-defined-symbols \ |
| 6 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 6 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 7 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 7 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 8 ; RUN: --target x8632 --sandbox -i %s --args -Om1 \ | 8 ; RUN: --target x8632 --sandbox -i %s --args -Om1 \ |
| 9 ; RUN: -allow-externally-defined-symbols \ | 9 ; RUN: -allow-externally-defined-symbols \ |
| 10 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 10 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 ; RUN: | %if --need=target_X8632 \ | 27 ; RUN: | %if --need=target_X8632 \ |
| 28 ; RUN: --command FileCheck --check-prefix=CHECKO2UNSANDBOXEDREM %s | 28 ; RUN: --command FileCheck --check-prefix=CHECKO2UNSANDBOXEDREM %s |
| 29 | 29 |
| 30 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 30 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 31 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ | 31 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
| 32 ; RUN: -i %s --args -O2 --skip-unimplemented \ | 32 ; RUN: -i %s --args -O2 --skip-unimplemented \ |
| 33 ; RUN: -allow-externally-defined-symbols \ | 33 ; RUN: -allow-externally-defined-symbols \ |
| 34 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 34 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 35 ; RUN: --command FileCheck --check-prefix ARM32 %s | 35 ; RUN: --command FileCheck --check-prefix ARM32 %s |
| 36 | 36 |
| 37 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
| 38 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target mips32\ |
| 39 ; RUN: -i %s --args -Om1 --skip-unimplemented \ |
| 40 ; RUN: -allow-externally-defined-symbols \ |
| 41 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ |
| 42 ; RUN: --command FileCheck --check-prefix MIPS32 %s |
| 43 |
| 37 declare i8* @llvm.nacl.read.tp() | 44 declare i8* @llvm.nacl.read.tp() |
| 38 declare void @llvm.nacl.longjmp(i8*, i32) | 45 declare void @llvm.nacl.longjmp(i8*, i32) |
| 39 declare i32 @llvm.nacl.setjmp(i8*) | 46 declare i32 @llvm.nacl.setjmp(i8*) |
| 40 declare float @llvm.sqrt.f32(float) | 47 declare float @llvm.sqrt.f32(float) |
| 41 declare double @llvm.sqrt.f64(double) | 48 declare double @llvm.sqrt.f64(double) |
| 42 declare float @llvm.fabs.f32(float) | 49 declare float @llvm.fabs.f32(float) |
| 43 declare double @llvm.fabs.f64(double) | 50 declare double @llvm.fabs.f64(double) |
| 44 declare <4 x float> @llvm.fabs.v4f32(<4 x float>) | 51 declare <4 x float> @llvm.fabs.v4f32(<4 x float>) |
| 45 declare void @llvm.trap() | 52 declare void @llvm.trap() |
| 46 declare i16 @llvm.bswap.i16(i16) | 53 declare i16 @llvm.bswap.i16(i16) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 60 %ptr = call i8* @llvm.nacl.read.tp() | 67 %ptr = call i8* @llvm.nacl.read.tp() |
| 61 %__1 = ptrtoint i8* %ptr to i32 | 68 %__1 = ptrtoint i8* %ptr to i32 |
| 62 ret i32 %__1 | 69 ret i32 %__1 |
| 63 } | 70 } |
| 64 ; CHECK-LABEL: test_nacl_read_tp | 71 ; CHECK-LABEL: test_nacl_read_tp |
| 65 ; CHECK: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 | 72 ; CHECK: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 |
| 66 ; CHECKO2REM-LABEL: test_nacl_read_tp | 73 ; CHECKO2REM-LABEL: test_nacl_read_tp |
| 67 ; CHECKO2REM: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 | 74 ; CHECKO2REM: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 |
| 68 ; CHECKO2UNSANDBOXEDREM-LABEL: test_nacl_read_tp | 75 ; CHECKO2UNSANDBOXEDREM-LABEL: test_nacl_read_tp |
| 69 ; CHECKO2UNSANDBOXEDREM: call {{.*}} R_{{.*}} __nacl_read_tp | 76 ; CHECKO2UNSANDBOXEDREM: call {{.*}} R_{{.*}} __nacl_read_tp |
| 77 ; MIPS32-LABEL: test_nacl_read_tp |
| 78 ; MIPS32: jal {{.*}} __nacl_read_tp |
| 70 | 79 |
| 71 define internal i32 @test_nacl_read_tp_more_addressing() { | 80 define internal i32 @test_nacl_read_tp_more_addressing() { |
| 72 entry: | 81 entry: |
| 73 %ptr = call i8* @llvm.nacl.read.tp() | 82 %ptr = call i8* @llvm.nacl.read.tp() |
| 74 %__1 = ptrtoint i8* %ptr to i32 | 83 %__1 = ptrtoint i8* %ptr to i32 |
| 75 %x = add i32 %__1, %__1 | 84 %x = add i32 %__1, %__1 |
| 76 %__3 = inttoptr i32 %x to i32* | 85 %__3 = inttoptr i32 %x to i32* |
| 77 %v = load i32, i32* %__3, align 1 | 86 %v = load i32, i32* %__3, align 1 |
| 78 %v_add = add i32 %v, 1 | 87 %v_add = add i32 %v, 1 |
| 79 | 88 |
| 80 %ptr2 = call i8* @llvm.nacl.read.tp() | 89 %ptr2 = call i8* @llvm.nacl.read.tp() |
| 81 %__6 = ptrtoint i8* %ptr2 to i32 | 90 %__6 = ptrtoint i8* %ptr2 to i32 |
| 82 %y = add i32 %__6, 4 | 91 %y = add i32 %__6, 4 |
| 83 %__8 = inttoptr i32 %y to i32* | 92 %__8 = inttoptr i32 %y to i32* |
| 84 %v_add2 = add i32 %v, 4 | 93 %v_add2 = add i32 %v, 4 |
| 85 store i32 %v_add2, i32* %__8, align 1 | 94 store i32 %v_add2, i32* %__8, align 1 |
| 86 ret i32 %v | 95 ret i32 %v |
| 87 } | 96 } |
| 88 ; CHECK-LABEL: test_nacl_read_tp_more_addressing | 97 ; CHECK-LABEL: test_nacl_read_tp_more_addressing |
| 89 ; CHECK: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 | 98 ; CHECK: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 |
| 90 ; CHECK: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 | 99 ; CHECK: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 |
| 91 ; CHECKO2REM-LABEL: test_nacl_read_tp_more_addressing | 100 ; CHECKO2REM-LABEL: test_nacl_read_tp_more_addressing |
| 92 ; CHECKO2REM: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 | 101 ; CHECKO2REM: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 |
| 93 ; CHECKO2REM: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 | 102 ; CHECKO2REM: mov e{{.*}},{{(DWORD PTR )?}}gs:0x0 |
| 94 ; CHECKO2UNSANDBOXEDREM-LABEL: test_nacl_read_tp_more_addressing | 103 ; CHECKO2UNSANDBOXEDREM-LABEL: test_nacl_read_tp_more_addressing |
| 95 ; CHECKO2UNSANDBOXEDREM: call {{.*}} R_{{.*}} __nacl_read_tp | 104 ; CHECKO2UNSANDBOXEDREM: call {{.*}} R_{{.*}} __nacl_read_tp |
| 96 ; CHECKO2UNSANDBOXEDREM: call {{.*}} R_{{.*}} __nacl_read_tp | 105 ; CHECKO2UNSANDBOXEDREM: call {{.*}} R_{{.*}} __nacl_read_tp |
| 106 ; MIPS32-LABEL: test_nacl_read_tp_more_addressing |
| 107 ; MIPS32: jal {{.*}} __nacl_read_tp |
| 97 | 108 |
| 98 define internal i32 @test_nacl_read_tp_dead(i32 %a) { | 109 define internal i32 @test_nacl_read_tp_dead(i32 %a) { |
| 99 entry: | 110 entry: |
| 100 %ptr = call i8* @llvm.nacl.read.tp() | 111 %ptr = call i8* @llvm.nacl.read.tp() |
| 101 ; Not actually using the result of nacl read tp call. | 112 ; Not actually using the result of nacl read tp call. |
| 102 ; In O2 mode this should be DCE'ed. | 113 ; In O2 mode this should be DCE'ed. |
| 103 ret i32 %a | 114 ret i32 %a |
| 104 } | 115 } |
| 105 ; Consider nacl.read.tp side-effect free, so it can be eliminated. | 116 ; Consider nacl.read.tp side-effect free, so it can be eliminated. |
| 106 ; CHECKO2REM-LABEL: test_nacl_read_tp_dead | 117 ; CHECKO2REM-LABEL: test_nacl_read_tp_dead |
| 107 ; CHECKO2REM-NOT: mov e{{.*}}, DWORD PTR gs:0x0 | 118 ; CHECKO2REM-NOT: mov e{{.*}}, DWORD PTR gs:0x0 |
| 108 ; CHECKO2UNSANDBOXEDREM-LABEL: test_nacl_read_tp_dead | 119 ; CHECKO2UNSANDBOXEDREM-LABEL: test_nacl_read_tp_dead |
| 109 ; CHECKO2UNSANDBOXEDREM-NOT: call {{.*}} R_{{.*}} __nacl_read_tp | 120 ; CHECKO2UNSANDBOXEDREM-NOT: call {{.*}} R_{{.*}} __nacl_read_tp |
| 121 ; MIPS32-LABEL: test_nacl_read_tp_dead |
| 122 ; MIPS32: jal {{.*}} __nacl_read_tp |
| 110 | 123 |
| 111 define internal i32 @test_setjmplongjmp(i32 %iptr_env) { | 124 define internal i32 @test_setjmplongjmp(i32 %iptr_env) { |
| 112 entry: | 125 entry: |
| 113 %env = inttoptr i32 %iptr_env to i8* | 126 %env = inttoptr i32 %iptr_env to i8* |
| 114 %i = call i32 @llvm.nacl.setjmp(i8* %env) | 127 %i = call i32 @llvm.nacl.setjmp(i8* %env) |
| 115 %r1 = icmp eq i32 %i, 0 | 128 %r1 = icmp eq i32 %i, 0 |
| 116 br i1 %r1, label %Zero, label %NonZero | 129 br i1 %r1, label %Zero, label %NonZero |
| 117 Zero: | 130 Zero: |
| 118 ; Redundant inttoptr, to make --pnacl cast-eliding/re-insertion happy. | 131 ; Redundant inttoptr, to make --pnacl cast-eliding/re-insertion happy. |
| 119 %env2 = inttoptr i32 %iptr_env to i8* | 132 %env2 = inttoptr i32 %iptr_env to i8* |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 ; CHECK: lea {{.*}},[esp+0x10] | 560 ; CHECK: lea {{.*}},[esp+0x10] |
| 548 ; CHECK: lea {{.*}},[esp+0x10] | 561 ; CHECK: lea {{.*}},[esp+0x10] |
| 549 ; CHECK: call | 562 ; CHECK: call |
| 550 ; CHECK: mov esp,{{.*}} | 563 ; CHECK: mov esp,{{.*}} |
| 551 ; CHECK: mov esp,ebp | 564 ; CHECK: mov esp,ebp |
| 552 ; ARM32-LABEL: test_stacksave_multiple | 565 ; ARM32-LABEL: test_stacksave_multiple |
| 553 ; ARM32: mov {{.*}}, sp | 566 ; ARM32: mov {{.*}}, sp |
| 554 ; ARM32: mov {{.*}}, sp | 567 ; ARM32: mov {{.*}}, sp |
| 555 ; ARM32: mov {{.*}}, sp | 568 ; ARM32: mov {{.*}}, sp |
| 556 ; ARM32: mov sp, {{.*}} | 569 ; ARM32: mov sp, {{.*}} |
| OLD | NEW |