59 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s3 4define zeroext i1 @f1(ptr %x) {5; CHECK-LABEL: f1:6; CHECK: ## %bb.0: ## %entry7; CHECK-NEXT: movzbl (%rdi), %eax8; CHECK-NEXT: retq9 10entry:11 %0 = load i8, ptr %x, align 1, !range !0, !noundef !{}12 %tobool = trunc i8 %0 to i113 ret i1 %tobool14}15 16define zeroext i1 @f2(ptr %x) {17; CHECK-LABEL: f2:18; CHECK: ## %bb.0: ## %entry19; CHECK-NEXT: movzbl (%rdi), %eax20; CHECK-NEXT: retq21 22entry:23 %0 = load i8, ptr %x, align 1, !range !0, !noundef !{}24 %tobool = icmp ne i8 %0, 025 ret i1 %tobool26}27 28!0 = !{i8 0, i8 2}29 30 31; check that we don't build a "trunc" from i1 to i1, which would assert.32define zeroext i1 @f3(i1 %x) {33; CHECK-LABEL: f3:34; CHECK: ## %bb.0: ## %entry35; CHECK-NEXT: movl %edi, %eax36; CHECK-NEXT: andb $1, %al37; CHECK-NEXT: ## kill: def $al killed $al killed $eax38; CHECK-NEXT: retq39 40entry:41 %tobool = icmp ne i1 %x, 042 ret i1 %tobool43}44 45; check that we don't build a trunc when other bits are needed46define zeroext i1 @f4(i32 %x) {47; CHECK-LABEL: f4:48; CHECK: ## %bb.0: ## %entry49; CHECK-NEXT: movzwl %di, %eax50; CHECK-NEXT: shrl $15, %eax51; CHECK-NEXT: ## kill: def $al killed $al killed $eax52; CHECK-NEXT: retq53 54entry:55 %y = and i32 %x, 3276856 %z = icmp ne i32 %y, 057 ret i1 %z58}59