diff options
Diffstat (limited to 'test/CodeGen')
-rw-r--r-- | test/CodeGen/SystemZ/int-cmp-46.ll | 40 | ||||
-rw-r--r-- | test/CodeGen/SystemZ/int-cmp-47.ll | 40 |
2 files changed, 80 insertions, 0 deletions
diff --git a/test/CodeGen/SystemZ/int-cmp-46.ll b/test/CodeGen/SystemZ/int-cmp-46.ll index 339ba11694..f311942b9f 100644 --- a/test/CodeGen/SystemZ/int-cmp-46.ll +++ b/test/CodeGen/SystemZ/int-cmp-46.ll @@ -449,3 +449,43 @@ store: exit: ret void } + +; Check that we can fold an SHL into a TMxx mask. +define void @f24(i32 %a) { +; CHECK-LABEL: f24: +; CHECK: tmll %r2, 255 +; CHECK: jne {{\.L.*}} +; CHECK: br %r14 +entry: + %shl = shl i32 %a, 12 + %and = and i32 %shl, 1044480 + %cmp = icmp ne i32 %and, 0 + br i1 %cmp, label %exit, label %store + +store: + store i32 1, i32 *@g + br label %exit + +exit: + ret void +} + +; Check that we can fold an SHR into a TMxx mask. +define void @f25(i32 %a) { +; CHECK-LABEL: f25: +; CHECK: tmlh %r2, 512 +; CHECK: jne {{\.L.*}} +; CHECK: br %r14 +entry: + %shr = lshr i32 %a, 25 + %and = and i32 %shr, 1 + %cmp = icmp ne i32 %and, 0 + br i1 %cmp, label %exit, label %store + +store: + store i32 1, i32 *@g + br label %exit + +exit: + ret void +} diff --git a/test/CodeGen/SystemZ/int-cmp-47.ll b/test/CodeGen/SystemZ/int-cmp-47.ll index bf206ed9db..c770ccdbb9 100644 --- a/test/CodeGen/SystemZ/int-cmp-47.ll +++ b/test/CodeGen/SystemZ/int-cmp-47.ll @@ -191,3 +191,43 @@ store: exit: ret void } + +; Check that we can fold an SHL into a TMxx mask. +define void @f11(i64 %a) { +; CHECK-LABEL: f11: +; CHECK: tmhl %r2, 32768 +; CHECK: jne {{\.L.*}} +; CHECK: br %r14 +entry: + %shl = shl i64 %a, 1 + %and = and i64 %shl, 281474976710656 + %cmp = icmp ne i64 %and, 0 + br i1 %cmp, label %exit, label %store + +store: + store i32 1, i32 *@g + br label %exit + +exit: + ret void +} + +; Check that we can fold an SHR into a TMxx mask. +define void @f12(i64 %a) { +; CHECK-LABEL: f12: +; CHECK: tmhh %r2, 256 +; CHECK: jne {{\.L.*}} +; CHECK: br %r14 +entry: + %shr = lshr i64 %a, 56 + %and = and i64 %shr, 1 + %cmp = icmp ne i64 %and, 0 + br i1 %cmp, label %exit, label %store + +store: + store i32 1, i32 *@g + br label %exit + +exit: + ret void +} |