// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 // RUN: %clang_cc1 -triple riscv64 -target-feature +f -emit-llvm %s -o - \ // RUN: | FileCheck %s struct __attribute__((packed, aligned(1))) S { const float f0; unsigned f1 : 1; }; // CHECK-LABEL: define dso_local signext i32 @func( // CHECK-SAME: float [[TMP0:%.*]], i8 [[TMP1:%.*]]) #[[ATTR0:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[ARG:%.*]] = alloca [[STRUCT_S:%.*]], align 1 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { float, i8 }, ptr [[ARG]], i32 0, i32 0 // CHECK-NEXT: store float [[TMP0]], ptr [[TMP2]], align 1 // CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw { float, i8 }, ptr [[ARG]], i32 0, i32 1 // CHECK-NEXT: store i8 [[TMP1]], ptr [[TMP3]], align 1 // CHECK-NEXT: [[F1:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[ARG]], i32 0, i32 1 // CHECK-NEXT: [[BF_LOAD:%.*]] = load i8, ptr [[F1]], align 1 // CHECK-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1 // CHECK-NEXT: [[BF_CAST:%.*]] = zext i8 [[BF_CLEAR]] to i32 // CHECK-NEXT: ret i32 [[BF_CAST]] // unsigned func(struct S arg) { return arg.f1; }