64 lines · plain
1; RUN: llc < %s -mtriple=ve | FileCheck %s2; RUN: llc < %s -mtriple=ve -relocation-model=pic \3; RUN: | FileCheck %s --check-prefix=PIC4 5;;; Tests for lea instruction and its optimizations6 7%struct.buffer = type { i64, [1 x i8] }8 9@data = internal global i8 0, align 110@buf = internal global %struct.buffer zeroinitializer, align 811 12; Function Attrs: norecurse nounwind readnone13define nonnull ptr @lea_basic() {14; CHECK-LABEL: lea_basic:15; CHECK: # %bb.0:16; CHECK-NEXT: lea %s0, data@lo17; CHECK-NEXT: and %s0, %s0, (32)018; CHECK-NEXT: lea.sl %s0, data@hi(, %s0)19; CHECK-NEXT: b.l.t (, %s10)20;21; PIC-LABEL: lea_basic:22; PIC: # %bb.0:23; PIC-NEXT: st %s15, 24(, %s11)24; PIC-NEXT: st %s16, 32(, %s11)25; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)26; PIC-NEXT: and %s15, %s15, (32)027; PIC-NEXT: sic %s1628; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)29; PIC-NEXT: lea %s0, data@gotoff_lo30; PIC-NEXT: and %s0, %s0, (32)031; PIC-NEXT: lea.sl %s0, data@gotoff_hi(%s0, %s15)32; PIC-NEXT: ld %s16, 32(, %s11)33; PIC-NEXT: ld %s15, 24(, %s11)34; PIC-NEXT: b.l.t (, %s10)35 ret ptr @data36}37 38; Function Attrs: norecurse nounwind readnone39define ptr @lea_offset() {40; CHECK-LABEL: lea_offset:41; CHECK: # %bb.0:42; CHECK-NEXT: lea %s0, buf@lo43; CHECK-NEXT: and %s0, %s0, (32)044; CHECK-NEXT: lea.sl %s0, buf@hi(8, %s0)45; CHECK-NEXT: b.l.t (, %s10)46;47; PIC-LABEL: lea_offset:48; PIC: # %bb.0:49; PIC-NEXT: st %s15, 24(, %s11)50; PIC-NEXT: st %s16, 32(, %s11)51; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)52; PIC-NEXT: and %s15, %s15, (32)053; PIC-NEXT: sic %s1654; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)55; PIC-NEXT: lea %s0, buf@gotoff_lo56; PIC-NEXT: and %s0, %s0, (32)057; PIC-NEXT: lea.sl %s0, buf@gotoff_hi(, %s0)58; PIC-NEXT: lea %s0, 8(%s0, %s15)59; PIC-NEXT: ld %s16, 32(, %s11)60; PIC-NEXT: ld %s15, 24(, %s11)61; PIC-NEXT: b.l.t (, %s10)62 ret ptr getelementptr inbounds (%struct.buffer, ptr @buf, i64 0, i32 1, i64 0)63}64