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