; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc -mtriple=i386-unknown-code16 < %s | FileCheck %s ;; In 16-bit mode, displacements are limited to [-65535,65535] (R_386_16). ;; Test boundary conditions for offset folding. @X = external global i32, align 4 ;; -65535 is within range, should fold define i32 @neg_65535() { ; CHECK-LABEL: neg_65535: ; CHECK: # %bb.0: ; CHECK-NEXT: leal X+65535, %eax ; CHECK-NEXT: retl ret i32 add (i32 ptrtoint (ptr @X to i32), i32 65535) } ;; 65535 is within range, should fold define i32 @pos_65535() { ; CHECK-LABEL: pos_65535: ; CHECK: # %bb.0: ; CHECK-NEXT: leal X-65535, %eax ; CHECK-NEXT: retl ret i32 sub (i32 ptrtoint (ptr @X to i32), i32 65535) } ;; -65536 is outside range, should NOT fold define i32 @neg_65536() { ; CHECK-LABEL: neg_65536: ; CHECK: # %bb.0: ; CHECK-NEXT: movl $65536, %eax # imm = 0x10000 ; CHECK-NEXT: leal X(%eax), %eax ; CHECK-NEXT: retl ret i32 add (i32 ptrtoint (ptr @X to i32), i32 65536) } ;; 65536 is outside range, should NOT fold define i32 @pos_65536() { ; CHECK-LABEL: pos_65536: ; CHECK: # %bb.0: ; CHECK-NEXT: movl $-65536, %eax # imm = 0xFFFF0000 ; CHECK-NEXT: leal X(%eax), %eax ; CHECK-NEXT: retl ret i32 sub (i32 ptrtoint (ptr @X to i32), i32 65536) }