brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · afc8cb5 Raw
93 lines · plain
1; Test load-and-trap instructions (LFHAT)2; See comments in asm-18.ll about testing high-word operations.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=zEC12 \5; RUN:   -no-integrated-as | FileCheck %s6 7declare void @llvm.trap()8 9; Check LAT with no displacement.10define void @f1(ptr %ptr) {11; CHECK-LABEL: f1:12; CHECK: lfhat [[REG:%r[0-9]+]], 0(%r2)13; CHECK: stepa [[REG]]14; CHECK: br %r1415entry:16  %val = load i32, ptr %ptr17  %cmp = icmp eq i32 %val, 018  br i1 %cmp, label %if.then, label %if.end19 20if.then:                                          ; preds = %entry21  tail call void @llvm.trap()22  unreachable23 24if.end:                                           ; preds = %entry25  call void asm sideeffect "stepa $0", "h"(i32 %val)26  ret void;27}28 29; Check the high end of the LAT range.30define void @f2(ptr %src) {31; CHECK-LABEL: f2:32; CHECK: lfhat [[REG:%r[0-9]+]], 524284(%r2)33; CHECK: stepa [[REG]]34; CHECK: br %r1435  %ptr = getelementptr i32, ptr %src, i64 13107136  %val = load i32, ptr %ptr37  %cmp = icmp eq i32 %val, 038  br i1 %cmp, label %if.then, label %if.end39 40if.then:                                          ; preds = %entry41  tail call void @llvm.trap()42  unreachable43 44if.end:                                           ; preds = %entry45  call void asm sideeffect "stepa $0", "h"(i32 %val)46  ret void;47}48 49; Check the next word up, which needs separate address logic.50; Other sequences besides this one would be OK.51define void @f3(ptr %src) {52; CHECK-LABEL: f3:53; CHECK: agfi %r2, 52428854; CHECK: lfhat [[REG:%r[0-9]+]], 0(%r2)55; CHECK: stepa [[REG]]56; CHECK: br %r1457  %ptr = getelementptr i32, ptr %src, i64 13107258  %val = load i32, ptr %ptr59  %cmp = icmp eq i32 %val, 060  br i1 %cmp, label %if.then, label %if.end61 62if.then:                                          ; preds = %entry63  tail call void @llvm.trap()64  unreachable65 66if.end:                                           ; preds = %entry67  call void asm sideeffect "stepa $0", "h"(i32 %val)68  ret void;69}70 71; Check that LAT allows an index.72define void @f4(i64 %src, i64 %index) {73; CHECK-LABEL: f4:74; CHECK: lfhat [[REG:%r[0-9]+]], 524287(%r3,%r2)75; CHECK: stepa [[REG]]76; CHECK: br %r1477  %add1 = add i64 %src, %index78  %add2 = add i64 %add1, 52428779  %ptr = inttoptr i64 %add2 to ptr80  %val = load i32, ptr %ptr81  %cmp = icmp eq i32 %val, 082  br i1 %cmp, label %if.then, label %if.end83 84if.then:                                          ; preds = %entry85  tail call void @llvm.trap()86  unreachable87 88if.end:                                           ; preds = %entry89  call void asm sideeffect "stepa $0", "h"(i32 %val)90  ret void;91}92 93