142 lines · plain
1; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -fixup-byte-word-insts=0 | \2; RUN: FileCheck -check-prefix=CHECK -check-prefix=BWOFF %s3; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -fixup-byte-word-insts=1 | \4; RUN: FileCheck -check-prefix=CHECK -check-prefix=BWON %s5; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -fixup-byte-word-insts=0 | \6; RUN: FileCheck -check-prefix=CHECK -check-prefix=BWOFF %s7; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -fixup-byte-word-insts=1 | \8; RUN: FileCheck -check-prefix=CHECK -check-prefix=BWON %s9; RUN: llc < %s -mtriple=x86_64-apple-darwin -fixup-byte-word-insts=0 | \10; RUN: FileCheck -check-prefix=DARWIN -check-prefix=DARWIN-BWOFF %s11; RUN: llc < %s -mtriple=x86_64-apple-darwin -fixup-byte-word-insts=1 | \12; RUN: FileCheck -check-prefix=DARWIN -check-prefix=DARWIN-BWON %s13 14 15@x = common global i32 0, align 416 17define zeroext i1 @unsigned_i1() {18entry:19 %0 = load i32, ptr @x20 %cmp = icmp eq i32 %0, 4221 ret i1 %cmp22 23; Unsigned i1 return values are not extended.24; CHECK-LABEL: unsigned_i1:25; CHECK: cmp26; CHECK-NEXT: sete27; CHECK-NEXT: ret28}29 30define zeroext i8 @unsigned_i8() {31entry:32 %0 = load i32, ptr @x33 %cmp = icmp eq i32 %0, 4234 %retval = zext i1 %cmp to i835 ret i8 %retval36 37; Unsigned i8 return values are not extended.38; CHECK-LABEL: unsigned_i8:39; CHECK: cmp40; CHECK-NEXT: sete41; CHECK-NEXT: ret42 43; Except on Darwin, for legacy reasons.44; DARWIN-LABEL: unsigned_i8:45; DARWIN: xorl46; DARWIN-NEXT: cmp47; DARWIN-NEXT: sete48; DARWIN-NEXT: ret49}50 51define signext i8 @signed_i8() {52entry:53 %0 = load i32, ptr @x54 %cmp = icmp eq i32 %0, 4255 %retval = zext i1 %cmp to i856 ret i8 %retval57 58; Signed i8 return values are not extended.59; CHECK-LABEL: signed_i8:60; CHECK: cmp61; CHECK-NEXT: sete62; CHECK-NEXT: ret63 64; Except on Darwin, for legacy reasons.65; DARWIN-LABEL: signed_i8:66; DARWIN: xorl67; DARWIN-NEXT: cmp68; DARWIN-NEXT: sete69; DARWIN-NEXT: ret70}71 72@a = common global i16 073@b = common global i16 074define zeroext i16 @unsigned_i16() {75entry:76 %0 = load i16, ptr @a77 %1 = load i16, ptr @b78 %add = add i16 %1, %079 ret i16 %add80 81; i16 return values are not extended.82; CHECK-LABEL: unsigned_i16:83; BWOFF: movw84; BWON: movzwl85; CHECK-NEXT: addw86; CHECK-NEXT: ret87 88; Except on Darwin, for legacy reasons.89; DARWIN-LABEL: unsigned_i16:90; DARWIN-BWOFF: movw91; DARWIN-BWON: movzwl92; DARWIN-NEXT: addw93; DARWIN-NEXT: movzwl94; DARWIN-NEXT: ret95}96 97 98define i32 @use_i1() {99entry:100 %0 = call i1 @unsigned_i1();101 %1 = zext i1 %0 to i32102 ret i32 %1103 104; The high 24 bits of %eax from a function returning i1 are undefined.105; CHECK-LABEL: use_i1:106; CHECK: call107; CHECK-NEXT: movzbl108; CHECK-NEXT: {{pop|add}}109; CHECK-NEXT: .cfi_def_cfa_offset {{4|8}}110; CHECK-NEXT: ret111}112 113define i32 @use_i8() {114entry:115 %0 = call i8 @unsigned_i8();116 %1 = zext i8 %0 to i32117 ret i32 %1118 119; The high 24 bits of %eax from a function returning i8 are undefined.120; CHECK-LABEL: use_i8:121; CHECK: call122; CHECK-NEXT: movzbl123; CHECK-NEXT: {{pop|add}}124; CHECK-NEXT: .cfi_def_cfa_offset {{4|8}}125; CHECK-NEXT: ret126}127 128define i32 @use_i16() {129entry:130 %0 = call i16 @unsigned_i16();131 %1 = zext i16 %0 to i32132 ret i32 %1133 134; The high 16 bits of %eax from a function returning i16 are undefined.135; CHECK-LABEL: use_i16:136; CHECK: call137; CHECK-NEXT: movzwl138; CHECK-NEXT: {{pop|add}}139; CHECK-NEXT: .cfi_def_cfa_offset {{4|8}}140; CHECK-NEXT: ret141}142