Index: tests_lit/llvm2ice_tests/address-mode-opt.ll |
diff --git a/tests_lit/llvm2ice_tests/address-mode-opt.ll b/tests_lit/llvm2ice_tests/address-mode-opt.ll |
index d5c2064db4b5bb16351f6dcd0fc16e9c2bfc6bf6..ccd301c4e8789d780060af78194f09db5fe0fd21 100644 |
--- a/tests_lit/llvm2ice_tests/address-mode-opt.ll |
+++ b/tests_lit/llvm2ice_tests/address-mode-opt.ll |
@@ -148,3 +148,42 @@ entry: |
; CHECK-LABEL: address_mode_opt_sub_min_int |
; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x80000000] |
} |
+ |
+define internal float @load_1_or__2_shl_arg(float* %arg) { |
+entry: |
+ %arg.int = ptrtoint float* %arg to i32 |
+ %shl1 = shl i32 %arg.int, 2 |
+ %addr.int = or i32 1, %shl1 |
+ %addr.ptr = inttoptr i32 %addr.int to float* |
+ %addr.load = load float, float* %addr.ptr, align 4 |
+ ret float %addr.load |
+; CHECK-LABEL: load_1_or__2_shl_arg |
+; CHECK-NOT: or |
+; CHECK: movss xmm{{[0-9]+}},DWORD PTR [{{e..}}*4+0x1] |
+} |
+ |
+define internal float @or_add_boundary_check_1(float* %arg) { |
+entry: |
+ %arg.int = ptrtoint float* %arg to i32 |
+ %shl1 = shl i32 %arg.int, 2 |
+ %addr.int = or i32 5, %shl1 |
+ %addr.ptr = inttoptr i32 %addr.int to float* |
+ %addr.load = load float, float* %addr.ptr, align 4 |
+ ret float %addr.load |
+; CHECK-LABEL: or_add_boundary_check_1 |
+; CHECK: or |
+; CHECK-NOT: movss xmm{{[0-9]+}},DWORD PTR [{{e..}}*4+0x5] |
+} |
+ |
+define internal float @or_add_boundary_check_2(float* %arg) { |
+entry: |
+ %arg.int = ptrtoint float* %arg to i32 |
+ %shl1 = shl i32 %arg.int, 2 |
+ %addr.int = or i32 -1, %shl1 |
+ %addr.ptr = inttoptr i32 %addr.int to float* |
+ %addr.load = load float, float* %addr.ptr, align 4 |
+ ret float %addr.load |
+; CHECK-LABEL: or_add_boundary_check_2 |
+; CHECK: or |
+; CHECK-NOT: movss xmm{{[0-9]+}},DWORD PTR [{{e..}}*4+0xFFFF] |
+} |