brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 2bee891 Raw
77 lines · plain
1; Test SELFHR.2; See comments in asm-18.ll about testing high-word operations.3;4; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu -mcpu=z15 \5; RUN:   -no-integrated-as | FileCheck %s6 7define void @f1(i32 %limit) {8; CHECK-LABEL: f1:9; CHECK-DAG: stepa [[REG1:%r[0-5]]]10; CHECK-DAG: stepb [[REG2:%r[0-5]]]11; CHECK-DAG: clfi %r2, 4212; CHECK: selfhrl [[REG3:%r[0-5]]], [[REG1]], [[REG2]]13; CHECK: stepc [[REG3]]14; CHECK: br %r1415  %a = call i32 asm sideeffect "stepa $0", "=h"()16  %b = call i32 asm sideeffect "stepb $0", "=h"()17  %cond = icmp ult i32 %limit, 4218  %res = select i1 %cond, i32 %a, i32 %b19  call void asm sideeffect "stepc $0", "h"(i32 %res)20  call void asm sideeffect "use $0", "h"(i32 %a)21  call void asm sideeffect "use $0", "h"(i32 %b)22  ret void23}24 25; Check that we also get SELFHR as a result of early if-conversion.26define void @f2(i32 %limit) {27; CHECK-LABEL: f2:28; CHECK-DAG: stepa [[REG1:%r[0-5]]]29; CHECK-DAG: stepb [[REG2:%r[0-5]]]30; CHECK-DAG: clfi %r2, 4131; CHECK: selfhrh [[REG3:%r[0-5]]], [[REG2]], [[REG1]]32; CHECK: stepc [[REG3]]33; CHECK: br %r1434entry:35  %a = call i32 asm sideeffect "stepa $0", "=h"()36  %b = call i32 asm sideeffect "stepb $0", "=h"()37  %cond = icmp ult i32 %limit, 4238  br i1 %cond, label %if.then, label %return39 40if.then:41  br label %return42 43return:44  %res = phi i32 [ %a, %if.then ], [ %b, %entry ]45  call void asm sideeffect "stepc $0", "h"(i32 %res)46  call void asm sideeffect "use $0", "h"(i32 %a)47  call void asm sideeffect "use $0", "h"(i32 %b)48  ret void49}50 51; Check that inverting the condition works as well.52define void @f3(i32 %limit) {53; CHECK-LABEL: f3:54; CHECK-DAG: stepa [[REG1:%r[0-5]]]55; CHECK-DAG: stepb [[REG2:%r[0-5]]]56; CHECK-DAG: clfi %r2, 4157; CHECK: selfhrh [[REG3:%r[0-5]]], [[REG1]], [[REG2]]58; CHECK: stepc [[REG3]]59; CHECK: br %r1460entry:61  %a = call i32 asm sideeffect "stepa $0", "=h"()62  %b = call i32 asm sideeffect "stepb $0", "=h"()63  %cond = icmp ult i32 %limit, 4264  br i1 %cond, label %if.then, label %return65 66if.then:67  br label %return68 69return:70  %res = phi i32 [ %b, %if.then ], [ %a, %entry ]71  call void asm sideeffect "stepc $0", "h"(i32 %res)72  call void asm sideeffect "use $0", "h"(i32 %a)73  call void asm sideeffect "use $0", "h"(i32 %b)74  ret void75}76 77